ActiveSheet与工作表
我正在使用Excel for Mac 2011,并且在一张表中有几个checkbox。 我试图用下面的代码自动化他们:
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,因为它给出属性/方法的下拉列表,我代码。
我想你会得到一个编译器错误,而不是运行时错误。
我怀疑ActiveSheet的工作原因是因为编译器不检查它。 另一方面,ws不起作用,因为编译器试图parsing它,而且实际上有一个错误的标志。 所以编译器检查器有一个错误。 它正在标记一个实际上不应该是错误的错误。
对象不支持此操作(错误445)
编辑:也试试这个,让我知道,如果它的作品:
Dim ws As Object Set ws = ActiveSheet With ws ...
值得注意的是ActiveSheet
和Worksheet
不是一回事。 ActiveSheet
还可以包含ChartSheet; 但ChartSheet不能成为Worksheet。 所以, With ws
和With ActiveSheet
之间的区别也许并不奇怪。
你应该尝试的另一件事是将你的对象设置为一个variables:
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
这可能会从等式中删除wsvariables。 当然,最好将正确的对象模糊化,而不是使用genericsas Object
但我不确定它会是什么。