代码之家  ›  专栏  ›  技术社区  ›  Chris Peh

VBA用户窗体上命令按钮的间距均匀

  •  2
  • Chris Peh  · 技术社区  · 12 月前

    我有几个用户表单(大小取决于用户输入——他们选择了多少功能)。 我的问题是,我想将“下一步”命令按钮与右下角对齐(将“后退”按钮与左下角对齐)。在下图中,我希望四条红线的距离都是一样的。

    我认为这可能就像使用UserForm1的高度和宽度,减去“下一步”,再加上“返回”一样简单,但这行不通。

    Private Sub UserForm_Initialize()
        'Adjust Commandbutton
        With CommandNext
                .Caption = " Next " & WorksheetFunction.Unichar(129094)
                .Width = 40
                .Height = 21
                .Left = UserForm1.Width - CommandNext.Width - 32
                .Top = UserForm1.Height - CommandNext.Height - 32
            End With
        With CommandBack
           .Caption = WorksheetFunction.Unichar(129092) & " Back "
           .Width = 40
           .Height = 21
            .Left = 32
            .Top = CommandNext.Top
            End With
    End Sub
    

    这是错误的:

    wrong distances

    如何更改代码以在任何大小的Userform上工作?

    已更新 我原本期望两个按钮与底部角落的距离相同(请注意,这并不完美,因为它是由递减/递增的数字产生的):

    "Back" and "Next" evenly spaced

    Private Sub UserForm_Initialize()
        'Adjust Commandbutton
        With CommandNext
                .Caption = " Next " & WorksheetFunction.Unichar(129094)
                .Width = 40
                .Height = 21
                .Left = UserForm1.Width - .Width - 14 'manually altered
                .Top = UserForm1.Height - .Height - 32
            End With
        With CommandBack
           .Caption = WorksheetFunction.Unichar(129092) & " Back "
           .Width = 40
           .Height = 21
            .Left = 5 'manually altered
            .Top = CommandNext.Top
            End With
    End Sub
    
    1 回复  |  直到 12 月前
        1
  •  2
  •   Michal    12 月前

    UserForm1.Width UserForm1.Height 定义用户表单的整个大小,包括边框和标题栏。你必须使用 .InsideWidth .InsideHeight 属性以获取用户表单的内部维度:

    .Left = UserForm1.InsideWidth - .Width
    .Top = UserForm1.InsideHeight - .Height
    

    InsideHeight, InsideWidth properties example