簡體   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