我有一个工作簿,其中包含一个带复选框的工作表。我目前正在使用Sheets("Voltest").cbFee
访问该复选框(名为cbFee)。这按预期工作。但是,我想创建第二个工作簿,因此我保存了包含我的宏的第一个工作簿和“Voltest”工作表作为对象wbMacros
。为了帮助减少wbMacros.Sheets("Voltest")
的所有输入,我通过创建一个Worksheet对象wsVoltest
并将其设置为该工作表来缩短它。
但是,当我尝试使用wsVoltest.cbFee
访问该复选框时,系统会提示“编译错误:找不到方法或数据成员。”
这是我的代码:
第1单元:
Public wbMacros As Workbook
Public wbFinish As Workbook
Public wsVoltest As Worksheet
Sub Voltest()
Set wbMacros = ThisWorkbook
Set wbFinish = Workbooks.Add
Set wsVoltest = wbMacros.Sheets("Voltest")
Application.run "TabNames"
End Sub
第2单元:
Sub TabNames()
Dim voltestSheet As Worksheet
Set voltestSheet = wbMacros.Sheets("Voltest")
' These two message boxes are for testing. They both display the correct value
MsgBox "wbMacros.Sheets: " & wbMacros.Sheets("Voltest").Name
MsgBox "Voltest sheet: " & voltestSheet.Name
' This If works just fine
If wbMacros.Sheets("Voltest").cbFee.Value Then
MsgBox "If hit"
End If
' This If gives the compile error
If voltestSheet.cbFee.Value Then
MsgBox "2nd If hit"
End If
我猜wsVoltest.Name工作正常,因为Name属性是所有Worksheet对象固有的,但复选框不是。如何强制编译器“了解”工作表包含的对象?
答案 0 :(得分:1)
考虑到下面的代码,您的问题可以改为:为什么Debug.Print ws.checkbox1.value
会出错,以及如何引用它:
Public Sub TestMe()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
Debug.Print Worksheets(1).CheckBox1.Value
'v----< Error if you uncomment!
'debug.Print ws.CheckBox1.value
'v----< This works:
Debug.Print ws.OLEObjects("CheckBox1").Object.Value
End Sub
答案是 - OLEObjects("name").Object