2017-01-03 50 views
0

我试图工作表分配给一个变量,然后用在该表中的控制的工作参考ActiveX控件。我真的很困惑,为什么当我可以从图纸编号中引用指定变量上的控件时不会工作。通过工作表变量(VBA)

Sub SheetNames() 
    Dim i As Integer 

    Dim pres As Worksheet 
    Call NumSheets 

    Set pres = Sheets("Presentation") 'Sheet18 (assignment works) 
    Sheet18.lbSheets.Clear 'This works 
    pres.lbSheets.Clear 'This fails (method or data member not found) 
End Sub 

回答

2

一个Worksheet对象是通用的“模板”对象类型,它只有在“开箱即用”,它适用于所有Worksheet对象的属性。你的具体表Sheet18已经控制添加,和这些控件现在是薄片的对象模型的一部分,但它们为通用Worksheet类的部分:现在你的表更像是工作表中特定的“子”,所以你不能将其声明为Worksheet,并仍然通过该引用访问控件。

但是,你可以声明它As Sheet18(以下简称“亚类”特定工作表):

Sub Tester() 

    Dim sht As Worksheet 
    Dim sht2 As Sheet18 

    Set sht = Sheet18 
    Debug.Print sht.lbSheets.ListCount '<< nope - compile error because the 
               ' Worksheet class has no 
               ' "lbSheets" member 

    Set sht2 = Sheet18 
    Debug.Print sht2.lbSheets.ListCount '<< OK! 
    'but you may as well skip the variable and just use 
    Debug.Print Sheet18.lbSheets.ListCount 

    'this also works if you know the sheet name and the control name 
    Set sht = ThisWorkbook.Sheets("Presentation") 
    Debug.Print sht.OLEObjects("lbSheets").Object.ListCount 

End Sub 
+0

大,解决了一些混乱。但是,我会如何去查找名单? Like Public currentSheet As sheets(“Presentation”) – user2130951

+0

你不知道什么时候写代码是哪张? –

+0

否,之后可以添加更多工作表。以上同样的问题仍然需要定义为sheet18。它可能会更改为sheet20 – user2130951