我正在使用Mac2011的Excel,并且我在一个工作表中有几个复选框。我试着用下面的代码使它们自动化:
Private Sub CheckBox12_Click()
Dim ws As Worksheet
Set ws = ActiveSheet
With ws
If .Shapes("CheckBox12").OLEFormat.Object.Value = xlOn Then
.Range("CK1").EntireColumn.Hidden = False
Else
.Range("CK1").EntireColumn.Hidden = True
End If
End With
End Sub此代码显示错误:运行时错误445对象不支持此操作。
但是,如果删除ws并执行以下操作
Private Sub CheckBox12_Click()
With ActiveSheet
If .Shapes("CheckBox12").OLEFormat.Object.Value = xlOn Then
.Range("CK1").EntireColumn.Hidden = False
Else
.Range("CK1").EntireColumn.Hidden = True
End If
End With
End Sub这个很好用。
这是怎么回事?我知道我可以只使用ActiveSheet,但我总是喜欢首先设置它= ws,因为它在我编写代码时给出了属性/方法的下拉列表。
发布于 2014-07-15 22:54:44
我认为你得到的是编译器错误,而不是运行时错误。
我怀疑ActiveSheet工作的原因是因为编译器不检查它。另一方面,ws不能工作,因为编译器正在尝试解析它,并且实际上有一个false标志。所以编译器检查器有一个错误。它正在标记一个实际上不应该是错误的错误。
Object doesn't support this action (Error 445)
编辑:也试一下,让我知道它是否有效:
Dim ws As Object
Set ws = ActiveSheet
With ws
...同样值得注意的是,ActiveSheet和Worksheet不是一回事。ActiveSheet还可以包含ChartSheet;但ChartSheet永远不能是工作表。因此,With ws和With ActiveSheet之间存在差异可能并不奇怪。
你应该尝试的另一件事是将你的对象设置为一个变量:
Dim ws As Worksheet
Set ws = ActiveSheet
Dim chk As Object
With ws
Set chk = .Shapes("CheckBox12").OLEFormat.Object
If chk.Value = xlOn Then
.Range("CK1").EntireColumn.Hidden = False
Else
.Range("CK1").EntireColumn.Hidden = True
End If
End With这可能会从方程中删除ws变量。当然,使用dim作为正确的对象会比使用通用的as Object更好,但我不确定它会是什么。
https://stackoverflow.com/questions/24739448
复制相似问题