如何为所有对象(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