VBA:在userform中一次移动多个元素
我想在单击复选框时展开我的userform。一些元素的移动应该与我的userform扩展的值相同,以便它们始终与表单的底部边框保持相同的距离 目前,我单独移动每个元素,就像这样,“Ausklapphoehe”是移动/扩展的值(它工作得很好,但我认为它没有很好地编码): 我有三个缩短代码的想法:VBA:在userform中一次移动多个元素,vba,excel,userform,Vba,Excel,Userform,我想在单击复选框时展开我的userform。一些元素的移动应该与我的userform扩展的值相同,以便它们始终与表单的底部边框保持相同的距离 目前,我单独移动每个元素,就像这样,“Ausklapphoehe”是移动/扩展的值(它工作得很好,但我认为它没有很好地编码): 我有三个缩短代码的想法: 将元素“id”存储在数组中,并通过在数组中迭代执行重复任务(不知道如何将元素存储在数组中) 只需对元素进行分组,并仅对该组执行任务(不知道如何在vba代码中寻址组) 给元素一个相互标记,只需在标记上寻址元
每个对象都有一个
标记
属性,您可以为所有要移动的对象指定一个标记,如删除
。那么代码就会非常清楚:
Private Sub Filtereigenschaften_Click()
Dim obj As Object
Dim adj As Variant
Filtergruppe.Visible = IIf(Filtereigenschaften.Value, True, False)
adj = IIf(Filtereigenschaften.Value, Ausklapphoehe, -Ausklapphoehe)
UserForm.Height = UserForm.Height + adj
For Each obj In Controls
If obj.Tag = toBeMoved Then obj.Top = obj.Top + adj
Next obj
End Sub
将值赋给.Tag
的方法可以写入UserForm\u Initialize()
,也可以通过属性窗口手动编辑它(如果隐藏,则按F4)。要使用“组”,请将框架
放在表单上,并在其上放置/拖动控件。
移动帧时,帧上的所有控件都会随之移动。如果要使框架本身不可见,请设置框架的边框
和标题
-属性。如果编写类似于Me.Frame1.Visible=false
的内容,它也会隐藏该框架上的所有控件
要使用标签访问控件,请执行以下操作:
Sub ControlsByTag(tag As String)
Dim ctrl As Control
For Each ctrl In Me.Controls
Debug.Print ctrl.Name, ctrl.tag
Next ctrl
End Sub
要使用数组:
' Assign to array:
Dim a
a = Array(Me.CommandButton1, Me.CommandButton2)
' Loop over the array:
Dim i As Long
For i = LBound(a) To UBound(a)
Debug.Print a(i).Name, a(i).tag
Next i
谢谢我不知道我可以隐藏边框和边框的标题。
' Assign to array:
Dim a
a = Array(Me.CommandButton1, Me.CommandButton2)
' Loop over the array:
Dim i As Long
For i = LBound(a) To UBound(a)
Debug.Print a(i).Name, a(i).tag
Next i