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

所以,让我们说我有这样的代码:

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

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

第一个选项

你可以这样做

 With Me .Frame1.Visible = True .Frame2.Visible = True .Frame3.Visible = True 'etc End With 

第二个选项

既然你有一系列的控制名称 。 你可以通过variables来循环它们。

 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)首先声明一个全局variables(位于模块/用户窗体代码的最上面)。

 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 

希望这可以帮助。 祝你好运!

在我看来,最简单的方法是循环遍历表单中的所有控件,并检查types或名称,以决定如何在下面的示例中执行操作:

 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