【问题标题】:Self Adjusting Userform Size自调整用户窗体大小
【发布时间】:2015-01-22 23:06:25
【问题描述】:

目标是自动调整大小以显示所有可见控件但没有额外死区的用户窗体。

顶部始终可见三个组合框,但下方是 26 个标签及其相关的五个选项按钮/复选框。这 26 行将全部开始隐藏,并且仅在特定条件下可见。

三个组合框中的第一个将说明 26 行中有多少行可能需要可见。但是,只有在第二个组合框选择“是”时,它们才会可见。

我正在使用 Excel 2013。

Private Sub ComboBox1_Change()
If Me.ComboBox1.Value > 0 And Me.ComboBox2.Value = "Yes" Then
    Vision
End If
End Sub


Private Sub ComboBox2_Change()
If Me.ComboBox1.Value > 0 And Me.ComboBox2.Value = "Yes" Then
    Vision
End If
End Sub


Private Sub UserForm_Initialize()
With ComboBox1
    .AddItem "1"
    .AddItem "2"
    .AddItem "3"
    .AddItem "4"
    .AddItem "5"
    .AddItem "6"
End With

With ComboBox2
    .AddItem "Yes"
    .AddItem "NO"
End With

With ComboBox3
    .AddItem "1"
    .AddItem "2"
End With

With Me
    .Controls("Label1").Visible = False
    .Controls("Label2").Visible = False
    .Controls("Label3").Visible = False
    .Controls("Label4").Visible = False
    .Controls("Label5").Visible = False
    .Controls("Label6").Visible = False
End With

With Me
    .Controls("Checkbox1").Visible = False
    .Controls("Checkbox2").Visible = False
    .Controls("Checkbox3").Visible = False
    .Controls("Checkbox4").Visible = False
    .Controls("Checkbox5").Visible = False
    .Controls("Checkbox6").Visible = False
End With
End Sub


Private Sub Vision()
Dim n As Long
With Me
    .Controls("Label1").Visible = False
    .Controls("Label2").Visible = False
    .Controls("Label3").Visible = False
    .Controls("Label4").Visible = False
    .Controls("Label5").Visible = False
    .Controls("Label6").Visible = False
End With

With Me
    .Controls("Checkbox1").Visible = False
    .Controls("Checkbox2").Visible = False
    .Controls("Checkbox3").Visible = False
    .Controls("Checkbox4").Visible = False
    .Controls("Checkbox5").Visible = False
    .Controls("Checkbox6").Visible = False
End With

For n = 1 To ComboBox1.Value
    With Me
        .Controls("Label" & n).Visible = True
        .Controls("Checkbox" & n).Visible = True
    End With
Next n
End Sub

我找到了调整用户窗体以适应不同显示器大小或在角落添加拖动条以手动调整大小的方法。

【问题讨论】:

    标签: excel vba resize userform excel-2013


    【解决方案1】:

    这是一种可能的方法。

    Private Sub UserForm_Activate()
        CheckSize
    End Sub
    
    Private Sub CommandButton1_Click()
        Me.lblTest.Visible = Not Me.lblTest.Visible
        CheckSize
    End Sub
    
    Private Sub CheckSize()
    Dim h, w
    Dim c As Control
    
        h = 0: w = 0
        For Each c In Me.Controls
            If c.Visible Then
                If c.Top + c.Height > h Then h = c.Top + c.Height
                If c.Left + c.Width > w Then w = c.Left + c.Width
            End If
        Next c
    
        If h > 0 And w > 0 Then
            With Me
                .Width = w + 40
                .Height = h + 40
            End With
        End If
    End Sub
    

    【讨论】:

    • 只要看一眼我填写的代码就可以做我想做的事。我必须跑去参加午餐会议,几个小时内不会回来,但当我这样做时,我会进行测试并做出回应。感谢您的宝贵时间。
    • 好的,我现在正在测试代码,我对 Private Sub Command Button1_Click 有疑问。你已经列出了Me.lbltest.visible = Not Me.lbltest.Visible我不确定这部分代码的作用或它的功能。我为示例构建了一个虚拟用户表单,我将使用其中的代码更新 OP,看看它是否有助于解释。
    • 感谢您对这个问题的帮助。
    • @ChadPortman - 这只是一段测试代码,它在我的测试表单上切换“最外层”控件的可见性,然后触发调整大小的代码。它仅用于测试 - 在您的用例中,只要您在表单上完成隐藏/取消隐藏控件,您只需调用 CheckSize
    • 你先生是个漂亮的男人,这工作完美无缺,我将在我的余生中将这段代码铭记在心!!!
    【解决方案2】:

    我发现问题在于显示设置 - 我将显示设置为 100%,但其他人将其设置为 150%,因此当他们将其设置回 100% 时,他们可以正确查看它

    【讨论】:

    • 感谢您的意见,但这已在 3 年前得到答复。
    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    相关资源
    最近更新 更多