Excel 自动调整大小/调整用户表单

Excel 自动调整大小/调整用户表单,excel,vba,userform,Excel,Vba,Userform,我是VBA编程新手,我有一个带有文本框、标签和复选框的用户表单 我的问题是如何自动调整表单的大小,因为我已经隐藏了文本框和标签,现在如果我单击按钮,它将取消隐藏文本框和标签,它还将自动调整表单和其他控件的大小 我不知道怎么开始 实际结果 假设在团队名称和姓氏之间存在隐藏的标签和Texbox,现在我单击更新单选按钮它将取消隐藏隐藏的标签和Texbox,并调整表单和其他控件 预期结果 有什么方法可以做到这一点吗?比如说,隐藏在顶部90pt处的控件Tbx所需的空间是30pt。因此,当Tbx可见时,

我是VBA编程新手,我有一个带有
文本框
标签和
复选框的
用户表单

我的问题是如何自动调整表单的大小,因为我已经隐藏了
文本框
标签
,现在如果我单击
按钮
,它将取消隐藏
文本框
标签
,它还将自动调整
表单
和其他控件的大小

我不知道怎么开始

实际结果

假设在
团队名称
姓氏
之间存在隐藏的
标签
Texbox
,现在我单击更新
单选按钮
它将取消隐藏隐藏的
标签
Texbox
,并调整表单和其他控件

预期结果


有什么方法可以做到这一点吗?

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

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
在实践中有两件事是不同的

  • 您可能需要再次隐藏控件
  • 您可以动态创建控件,而不是将其隐藏
  • 如果计划再次隐藏该控件,则需要一个包含所有受影响控件名称的数组,以及另一个用于其现有顶部的数组(或维度)。您将循环遍历数组中的所有名称并重置顶部,如

    Me.Controls(Arr(0, i)).Top = Arr(1, i) + Iif(HideMe, 0, 30)
    
    研究动态创建控件。您应该能够简单地创建继承所有属性的现有控件的副本。但是,该控件的任何事件代码都需要提前准备