Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 自调整用户表单大小_Excel_Vba_Resize_Userform_Excel 2013 - Fatal编程技术网

Excel 自调整用户表单大小

Excel 自调整用户表单大小,excel,vba,resize,userform,excel-2013,Excel,Vba,Resize,Userform,Excel 2013,目标是一个用户表单,它自动调整大小以显示所有可见控件,但不显示额外的死区 顶部有三个组合框始终可见,但下面有26个标签及其关联的五个选项按钮/复选框。这26行都将开始隐藏,并且只有在特定条件下才可见 三个组合框中的第一个框将说明26行中有多少行可能需要可见。但是,只有在第二个组合框显示yes时,它们才可见 我正在使用Excel 2013 Private Sub ComboBox1_Change() If Me.ComboBox1.Value > 0 And Me.ComboBox2.Val

目标是一个用户表单,它自动调整大小以显示所有可见控件,但不显示额外的死区

顶部有三个组合框始终可见,但下面有26个标签及其关联的五个选项按钮/复选框。这26行都将开始隐藏,并且只有在特定条件下才可见

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

我正在使用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

我找到了调整用户表单以适应不同显示器大小的方法,或者在角落中添加一个dragbar以手动调整大小。

这里有一种可能的方法

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

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

只要看一眼我填写的代码,就可以完成我想要的操作。我必须赶去参加一个午餐会,几个小时内不会回来,但当我回来的时候,我会测试并回应。谢谢您的时间。好的,我现在正在测试代码,我有一个关于私有子命令按钮的问题。您已经在那里列出了
Me.lbltest.visible=不是Me.lbltest.visible
我不确定这部分代码的作用或功能。我为一个示例构建了一个虚拟用户表单,我将用其中的代码更新OP,看看它是否有助于解释。感谢您对这个问题的帮助。@ChadPortman-这只是一段测试代码,用于切换测试表单上“最外层”控件的可见性,然后触发调整大小代码。它只用于测试-在您的用例中,您只要在表单上隐藏/取消隐藏控件后随时调用
CheckSize
。您是一个美丽的人,这工作非常完美,我将在我的余生中保持这段代码贴近我的心!!!感谢您的意见,但这已在3年前得到答复。