使用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的ShapeObject 。 它将帮助你编写一个“更干净”的代码,并找出哪些属性可以修改。

在下面的图片中,我定义了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