从自定义的Worksheet对象访问Excel工作表特定的对象

时间:2018-03-21 17:08:04

标签: excel vba excel-vba checkbox

我有一个工作簿,其中包含一个带复选框的工作表。我目前正在使用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对象固有的,但复选框不是。如何强制编译器“了解”工作表包含的对象?

1 个答案:

答案 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