我已经将一些表单控件添加到集合中,并且可以在通过索引引用成员时检索它们的属性。为什么我无法从此集合的成员获取属性?
但是,当我尝试通过引用集合的成员来使用任何属性时,我看到'无法设置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