2017-01-03 82 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