使用IF和OLEObjects的问题
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
在编写代码时,尝试将variables分配给您打算稍后修改或testing的每种types的Shape
和Object
。 它将帮助你编写一个“更干净”的代码,并找出哪些属性可以修改。
在下面的图片中,我定义了Dim obj As OLEObject
,之后我设置了Set obj = ActiveSheet.OLEObjects("CBClutch")
。
所以后来,当我有我的With obj
声明,我可以看到当我点击.
这个对象有什么属性。 在屏幕截图中可以看出,它没有TextFrame
– 所以If
稍后使用If
检查时会返回一个错误。
如果您可以find工作表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