繁体   English   中英

VBA UserForm可见范围

[英]VBA UserForm visible range

我有一个尺寸为(h * w)180 * 240的UserForm_Initialize() 。向此UserForm_Initialize()添加的控件是基于大量用户输入的UserForm_Initialize()事件,之后将调整用户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

生成以下用户表单: USerform2示例1

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

如何获得第二个标签,使其完全位于用户窗体可见部分的底部和右侧边缘,如下图所示? (我已经编辑了第一张图片以显示我想要的内容) 在此处输入图片说明

使用InsideHeightInsideWidth属性:

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

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

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。

您可以将这两个变量声明为“私有”或“公共属性”,或声明为“静态”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM