If ActiveSheet.OLEObjects("CBClutch").TextFrame.Characters.Text = "Q1"
- 自行正常工作。
If ActiveSheet.Shapes("CMDFilter").TextFrame.Characters.Text = "Filter"
- 也可以自行正常工作。
当我运行下面的If语句时,我得到一个Run-time error '438'
。我做错了什么?
If ActiveSheet.OLEObjects("CBClutch").TextFrame.Characters.Text = "Q1" And ActiveSheet.Shapes("CMDFilter").TextFrame.Characters.Text = "Filter" Then
Range("B1608:L1609").Select
Selection.AutoFilter
ActiveSheet.Range("$B$1608:$L$1714").AutoFilter Field:=8, Criteria1:="<>"
ActiveSheet.Shapes("CMDFilter").TextFrame.Characters.Text = "Un-Filter"
Range("A1604").Select
Else
Range("B1608:L1609").Select
Selection.AutoFilter
Range("A1604").Select
ActiveSheet.Shapes("CMDFilter").TextFrame.Characters.Text = "Filter"
End If
答案 0 :(得分:2)
编码时,尝试将变量分配给您打算稍后修改或测试的每种Shape
和Object
类型。它将帮助您编写“更干净”的代码,并找出可以修改的属性。
在下图中,我定义了Dim obj As OLEObject
,之后我将其设为Set obj = ActiveSheet.OLEObjects("CBClutch")
。
所以稍后,当我有With obj
语句时,我可以看到当我点击.
此对象具有哪些属性时。从屏幕截图中可以看出,它没有TextFrame
- 因此在稍后使用If
进行检查时会返回错误。
答案 1 :(得分:0)
如果您可以找到工作表CodeName
,则可以直接访问ActiveX控件:
If Sheet1.CBClutch = "Q1" And Sheet1.CMDFilter.Caption = "Filter" Then
Sheet1.Range("B1608:L1714").AutoFilter 8, "<>"
Sheet1.CMDFilter.Caption = "Un-Filter"
Else
Sheet1.AutoFilterMode = False
Sheet1.CMDFilter.Caption = "Filter"
End If