2012-09-06 33 views
0

对于创建对象变量的基本函数,我可以引用哪些对象出现在用户窗体中?我可以使用哪些VBA对象作为参考?

例如,我知道

Dim button As CommandButton 
    Set button = CommandButton1 
    button.Caption = "Text I can change for this object." 

将运行并改变CommanButton1的性能。由于不匹配错误,这似乎不适用于用户表单中的标签或文本框。有没有可用于这种方式的对象列表,有没有一种方法可以使用标签或文本框这样的数组?

+0

尝试使用值属性(我认为)的文本框。你是什​​么意思“使用标签或文本框这样的阵列”?你能更清楚一点吗? – mkingston

+0

你可能需要在你想要做的事情上添加更多的上下文。 'Me.CommandButton1.Caption =“blah”'是更简单的方法。或者'Me.Controls(“CommandButton1”)。Caption'如果你使用后者,那么只要命名控件具有Caption属性,它就可以工作。 –

+0

理想情况下,我想在我可以访问的用户窗体中使用我的标签数组。我已经看到循环遍历页面中的每个控件,但我更愿意为我自己的数组提供每个单独对象的引用。 – user1229293

回答

0

由于您在评论中指出您正在寻找按类型排列的数组,因此对于用户表单...以下是适用于标签的示例草稿(MsForms.Label)。它仍然循环遍历所有的控件,但是一旦创建了数组,您可以自由使用它。

Option Explicit 
Private labels() As MSForms.label 

Private Sub PopulateLabelArray() 
    Dim ctrl As Control 
    Dim count As Long 
    Dim lbl As Variant 
    For Each ctrl In Me.Controls 
     If TypeOf ctrl Is MSForms.label Then 
     count = count + 1 
     End If 
    Next 
    ReDim labels(1 To count) 
    count = 0 
    For Each ctrl In Me.Controls 
     If TypeOf ctrl Is MSForms.label Then 
      count = count + 1 
      Set labels(count) = ctrl 
     End If 
    Next 
End Sub 

Private Sub UserForm_Initialize() 
    Dim lbl As variant 
    'Populate the label array. 
    PopulateLabelArray 
    'Test the array 
    For Each lbl In labels() 
    Debug.Print lbl.Caption 
    Next 
End Sub 

我相信这可以改善,但这是功能。

+0

这就是我需要的!非常感谢。我运行它时发生的小错误,在UserForm_Initialize下的lbl需要是类型变体。否则这适用于我的标签和文本框,谢谢。 – user1229293

+0

有趣的是,我在测试时发现错误,修复了错误,然后仍然给出了错误。哎呀。很高兴它按照你的想法工作。 –