当我单击复选框时,我想扩展用户窗体。某些元素的移动值应与我的用户窗体扩展时的值相同,以便它们始终与窗体的底部边框保持相同的距离。
此刻,我像这样单独移动每个元素,其中“ Ausklapphoehe”是移动/扩展的值(它工作得很好,但我认为它的编码不好):
Private Sub Filtereigenschaften_Click()
If Filtereigenschaften.Value = False Then
Filtergruppe.Visible = False
UserForm.Height = UserForm.Height - Ausklapphoehe
Button.Top = Button.Top - Ausklapphoehe
FHLabel.Top = FHLabel.Top - Ausklapphoehe
FHBox.Top = FHBox.Top - Ausklapphoehe
NutenabstandLabel.Top = NutenabstandLabel.Top - Ausklapphoehe
NutenabstandBox.Top = NutenabstandBox.Top - Ausklapphoehe
SpinButton.Top = SpinButton.Top - Ausklapphoehe
VersionLabel.Top = VersionLabel.Top - Ausklapphoehe
End If
If Filtereigenschaften.Value = True Then
Filtergruppe.Visible = True
UserForm.Height = UserForm.Height + Ausklapphoehe
Button.Top = Button.Top + Ausklapphoehe
FHLabel.Top = FHLabel.Top + Ausklapphoehe
FHBox.Top = FHBox.Top + Ausklapphoehe
NutenabstandLabel.Top = NutenabstandLabel.Top + Ausklapphoehe
NutenabstandBox.Top = NutenabstandBox.Top + Ausklapphoehe
SpinButton.Top = SpinButton.Top + Ausklapphoehe
VersionLabel.Top = VersionLabel.Top + Ausklapphoehe
End If
End Sub
我有三个想法可以缩短代码:
答案 0 :(得分:2)
每个对象都有一个Tag
属性,您可以分配所有要移动标签的对象,例如toBeMoved
。然后,代码将非常清楚:
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_Initialize()
中,也可以通过“属性窗口”(如果隐藏则按F4键)手动编辑。
答案 1 :(得分:1)
要使用“ 组”,请在表单上放置一个Frame
并在其上放置/拖动控件。
移动框架时,框架上的所有控件都会随之移动。如果要使框架本身不可见,请设置框架的border
和caption
属性。如果您编写类似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