VBA dynamic UserForm conrols: how to add a number of pairs of label and textbox controls based on sheet columns count
To dynamically add a given number of pairs of label and textbox controls to a form in Excel using VBA, you can follow the steps below:
- Open the VBA editor in Excel by pressing Alt+F11.
 - Insert a UserForm by clicking on "Insert" -> "UserForm."
 - Design your UserForm by adding a label and textbox controls.
 - Place them in the desired location on the form.
 - In the code module for the UserForm, declare the necessary variables
 
VBA
Dim labelArray() As Object
Dim textBoxArray() As Object
Dim numRows As Integer
Dim textBoxArray() As Object
Dim numRows As Integer
- Add a procedure to dynamically create the label and textbox pairs based on the given number of rows.
 
VBA
Sub AddLabelTextBoxPairs(numPairs As Integer)
    Dim i As Integer
    Dim topPos As Integer
    Dim leftPos As Integer
    
    numRows = numPairs
    
    ' Clear existing controls, if any
    ClearControls
    
    ' Initialize arrays
    ReDim labelArray(1 To numRows)
    ReDim textBoxArray(1 To numRows)
    
    ' Set initial position
    topPos = 10
    leftPos = 10
    
    ' Loop to create label and textbox pairs
    For i = 1 To numRows
        ' Create label
        Set labelArray(i) = Me.Controls.Add("Forms.Label.1", "Label" & i, True)
        With labelArray(i)
            .Caption = ThisWorkbook.Sheets("Sheet1").Cells(1, i).Value ' Use the first row as label text
            .Left = leftPos
            .Top = topPos
            .Width = 100
            .Height = 20
        End With
        
        ' Create textbox
        Set textBoxArray(i) = Me.Controls.Add("Forms.TextBox.1", "TextBox" & i, True)
        With textBoxArray(i)
            .Left = leftPos + 100 ' Adjust position for the textbox
            .Top = topPos
            .Width = 100
            .Height = 20
            .Text = ThisWorkbook.Sheets("Sheet1").Cells(i + 1, i).Value ' Use corresponding cell value for textbox text
        End With
        
        ' Update position for the next pair
        topPos = topPos + 30
    Next i
End Sub
- Optional: Add a procedure to clear existing controls, if any. This is necessary when dynamically adding controls multiple times.
 
VBA
Sub ClearControls()
    Dim i As Integer
    
    ' Loop to delete existing controls
    For i = 1 To numRows
        Me.Controls.Remove labelArray(i).Name
        Me.Controls.Remove textBoxArray(i).Name
    Next i
    
    ' Reset arrays
    Erase labelArray
    Erase textBoxArray
End Sub
You can call the AddLabelTextBoxPairs procedure from a button click event or another part of your code to dynamically add the label and textbox pairs to the UserForm.
VBA
Sub ClearControls()
Private Sub CommandButton1_Click()
    Dim numPairs As Integer
    numPairs = 5 ' Specify the desired number of pairs
    
    AddLabelTextBoxPairs numPairs
End Sub

Комментарии
Отправить комментарий