1

我是 VBA 编程新手,我有一个Userformwith TextBoxesLabelsCheckboxes.

我的问题是如何自动调整大小或调整表单,因为我已经隐藏了Textboxand Label,现在如果我单击Button它将取消隐藏TexboxandLabel并且它会自动调整大小Form和其他控件。

我不知道如何开始。

实际结果

在此处输入图像描述

让我们假设有隐藏LabelTexbox之间Team NameLast Name现在我单击更新RadioButton它将取消隐藏隐藏LabelTexbox调整表单和其他控件。

预期结果

在此处输入图像描述

有没有办法做到这一点?

4

1 回答 1

1

比方说,控件Tbx隐藏在距离顶部90pt的级别所需的空间是30pt。因此,当 Tbx 可见时,它下面的所有控件都应该向下移动 30pt,并且窗体的高度也增加了相同的量度。下面的代码将完成该操作,同时取消隐藏控件。

Dim Ctl As MSForms.Controls

For Each Ctl In Me.Controls
    With Ctl
        If .Top >= 90 Then
            If .Visible = True Then
                .Top = Top + 30
            Else
                .Visible = True
            End If
        End If
    End With
Next Ctl
Me.Top = Top + 30

有两件事在实践中会有所不同。

  1. 您可能需要再次隐藏控件。
  2. 您将动态创建控件,而不是将其隐藏。

如果您打算再次隐藏该控件,您将需要一个包含所有受影响控件名称的数组和另一个数组(或维度)来存储它们现有的Top s。您将遍历数组中的所有名称并重置顶部,例如,

Me.Controls(Arr(0, i)).Top = Arr(1, i) + Iif(HideMe, 0, 30)

研究动态创建控件。您应该能够简单地创建一个现有控件的副本,并从中继承所有属性。但是,该控件的任何事件代码都需要提前准备好。

于 2020-01-24T08:31:47.843 回答