如何为所有对象分配相同的属性(MSForm控件)?

时间:2017-05-22 21:48:37

标签: excel excel-vba excel-2010 vba

所以我想说我有这段代码:

With Me
    Frame1.Visible: Frame2.Visible: Frame3.Visible 'Ect... = False
End With

如何使With me中列出的所有对象具有相同的属性,而不是为每个对象添加.Visible属性?

2 个答案:

答案 0 :(得分:2)

第一个选项

您可以使用

执行此操作
With Me
  .Frame1.Visible = True
  .Frame2.Visible = True
  .Frame3.Visible = True
  'etc
End With

第二个选项

由于您有一系列控件名称。您可以使用变量循环遍历它们。

Dim iLoop as Integer  '<~ declaring the variable we will use
For iLoop = 1 to 3    '<~ Loop from 1 to 3
  Me.Controls("Frame" & iLoop).Visible = True  '<~ set the .Visible property of each control to true
Next

请注意,如果您的用户表单中没有该控件,则会返回错误。

第三个选项

如果您经常循环访问此控件,则可以将它们添加到集合中,然后在运行时循环遍历该集合。

1)首先声明一个全局变量(位于模块/用户表单代码的最上面)。

Private CollectionOfControls as Collection

2)使用UserForm_Initialize

将它们添加到此集合中
Private Sub UserForm_Initialize()
Dim iLoop As Integer
Set CollectionOfControls = New Collection
With CollectionOfControls
  For iLoop = 1 To 3
    .Add Me.Controls("Frame" & iLoop)
  Next
End Sub

3.a)然后在运行时,你可以循环遍历它们,

Sub Caller1()
Dim oEach As Object
For Each oEach In CollectionOfControls
  oEach.Visible = True
  ' do something
Next
End Sub

3.b)或类似的东西,

Sub Caller2()
Dim iLoop As Integer
For iLoop = 1 To CollectionOfControls.Count
  CollectionOfControls.Item(iLoop).Visible = True
  ' do something
Next
End Sub

希望这会有所帮助。祝你好运!

答案 1 :(得分:2)

最简单的方法 - 在我看来 - 是循环遍历表单中的所有控件并检查类型或名称以决定在以下示例中做什么:

For Each c In Me.Controls
    If TypeName(c) = "Frame" Then
        ' do something
    End If
    If c.Name Like "Frame*" Then
        ' do something else
    End If
Next c