所以我想说我有这段代码:
With Me
Frame1.Visible: Frame2.Visible: Frame3.Visible 'Ect... = False
End With
如何使With me
中列出的所有对象具有相同的属性,而不是为每个对象添加.Visible
属性?
答案 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