【问题标题】:VBA UserForm visible rangeVBA 用户窗体可见范围
【发布时间】:2016-03-08 13:32:46
【问题描述】:

我有一个尺寸为 (h*w) 180 * 240 的用户表单。UserForm_Initialize() 事件将根据无数用户输入向此用户表单添加控件,然后调整用户表单的大小。我遇到的问题是用户窗体的可见范围小于实际范围。为了演示,我插入了第二个用户表单,代码如下:

Private Sub UserForm_Initialize()
    Dim ctrl As Control
    Dim i As Integer

    For i = 1 To 2
        Set ctrl = Me.Controls.Add("Forms.Label.1")
        With ctrl
            Debug.Print .Name
            .Caption = i
            .BorderStyle = 1
            .Height = 10
            .Width = 10
        End With
    Next i

    Set ctrl = Me.Controls("Label1")
    With ctrl
        .Top = 0
        .Left = 0
    End With

    Set ctrl = Me.Controls("Label2")
    With ctrl
        .Top = Me.Height - .Height
        .Left = Me.Width - .Width
    End With
End Sub

生成以下用户表单:

第一个标签正好位于用户窗体的顶部和左边缘,但第二个标签无处可见,因为它不在用户窗体的可见部分。

如何让第二个标签准确地位于用户窗体可见部分的底部和右侧边缘,如下图所示? (我已经编辑了第一张图片以显示我想要的内容)

【问题讨论】:

标签: excel layout userform vba


【解决方案1】:

使用InsideHeightInsideWidth 属性:

With ctrl
    .Top = Me.InsideHeight - .Height
    .Left = Me.InsideWidth - .Width
End With

【讨论】:

  • 谢谢,这就是诀窍,不幸的是它是一个只读属性,我不能直接设置它
  • 为什么需要?
  • 我正在根据用户输入调整表单的大小,并且我总是希望控件周围的边缘宽度相同。
【解决方案2】:

要更改 InsideHeight/InsideWidth,您必须计算实际的高度/宽度。为此,您需要知道每个用户窗体边框的宽度和标题栏的高度。例如,在用户窗体的初始化中某处做

Static FormBorderSize as single, FormTitleSize as single
With Me
  FormBorderSize = (Me.Width-Me.InsideWidth)/2
  FormTitleSize = Me.Height-(Me.InsideHeight+Me.FormBorderSize)
End With

使用这两个值,您可以计算用户窗体的整体高度/宽度,以获得所需的 InsideHeight/InsideWidth。

您可以将这两个变量声明为 Private 或 Public Properties 或如此处所示为 Static。

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多