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

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