我已經將一些表單控件添加到集合中,並且可以在通過索引引用成員時檢索它們的屬性。爲什麼我無法從此集合的成員獲取屬性?
但是,當我嘗試通過引用集合的成員來使用任何屬性時,我看到'無法設置ControlSource屬性。未找到會員。'在本地窗口中出現錯誤。
下面是代碼的簡化版本:
'Add controls to collection'
For x = 0 To UBound(tabs)
activeTabs.Add Item:=Form.MultiPage.Pages(Val(tabs(x, 1))), _
key:=Form.MultiPage.Pages(Val(tabs(x, 1))).Caption
Next x
'Check name using collection index'
For x = 0 To UBound(tabs)
Debug.Print "Tab name from index: " & activeTabs(x + 1).Caption
Next x
'Check name using collection members'
For Each formTab In activeTabs
Debug.Print "Tab name from collection: " & formTab.Caption
Next formTab
在即時窗口,結果是:
Tab name from index: Caption1
Tab name from index: Caption2
Tab name from collection:
Tab name from collection:
爲什麼一個方法的工作,其他的失敗?
這是在一個標準的代碼模塊,但我有類似的代碼在表單模塊內工作得很好。這可能與它有什麼關係?
編輯補充
formTab被宣佈爲控制,但我覺得,如果它被聲明爲一個對象,然後代碼工作。
這可能會解決我的問題,但爲了進一步提高我的知識水平,我將非常感謝任何有關此行爲的解釋,特別是關於在不同類型的模塊中運行代碼的差異。
謝謝,這很有道理。我將formTab聲明爲Page(控件的正確名稱,我只是更喜歡將它們稱爲選項卡),並且您預測它可以正常工作。我也將代碼複製到一個表單模塊中,無論formTab是否聲明爲Control,Page或Object,它都可以工作。奇怪的。 – Lunatik 2010-04-30 12:17:26
@Lunatik VB有時會跳過很多圈試圖找出你想要做的事情。不幸的是,這並不總是導致良好的代碼,並會讓你不知道你的代碼在做什麼。我寫了大量的代碼,我不知道它在做什麼,但VBA允許它工作:-)。 – 2010-04-30 12:21:52