我有一个由文本框和命令按钮组成的用户窗体。通过在TextBox中输入一个值(例如3),并单击CommandButton,我可以创建3个新TextBox,其中每个标签都链接有标签。它还在这些TextBox下方创建一个标签,并在另一个CommandButton处标记一个标签。
然后,我在每个新的TextBox中编写一个值。例如,在第一个TextBox中,我编写“ Banana”,在第二个“ Apple”中编写,依此类推。
现在,我想通过单击新的CommandButton来执行的操作是从新的TextBoxes中获取值并将其写入工作表中(例如sheet1)。
我的问题是,考虑到它们是在运行时创建的,因此我真的不知道如何从这些新的TextBox中获取值。
这里是链接到我的UserForm的代码:
Option Explicit
Dim cmdArray() As New Classe1
Public Sub nbEquipButtonValidation_Click()
Dim i As Variant
Dim Nb_equip As Integer
Dim j As Long
Nb_equip = UserForm1.nbEquipTextBox.Value
For i = 1 To Nb_equip
Dim EquipLabel
Dim Text_Boxes
Dim CmdBtn
Set EquipLabel = Me.Controls.Add("Forms.Label.1")
With EquipLabel
.Top = 25 + 10 * i * 2
.Left = 10
.Caption = "Equipement n°" & CStr(i)
.Name = "Equip" & CStr(i)
End With
Set Text_Boxes = Me.Controls.Add("Forms.TextBox.1", True)
With Text_Boxes
.Top = 20 + 10 * i * 2.1
.Left = 100
.Name = "Text_Box" & CStr(i)
End With
Next i
Set CmdBtn = Me.Controls.Add("Forms.CommandButton.1")
With CmdBtn
.Top = 20 + 10 * Nb_equip * 2.1 + 30
.Left = 75
.Caption = "Créer"
.Name = "Validation"
End With
' Apply a class to the new Button
j = 1
ReDim Preserve cmdArray(1 To j)
Set cmdArray(j).CmdEvents = CmdBtn
Set CmdBtn = Nothing
End Sub
这里也是我创建的类,用于获取这些数据并通过单击第二个CommandButton将它们写在工作表中。
Option Explicit
Public WithEvents CmdEvents As MSForms.CommandButton
Private Sub CmdEvents_Click()
Dim Ws As Worksheet
Set Ws = Worksheets("Sheet1")
Dim i As Variant
Dim Nb_equip As Integer
Nb_equip = UserForm1.nbEquipTextBox.Value
For i = 1 To Nb_equip
With Ws
.Cells(6, 2 + i * 2).Value = "Exp" & CStr(i)
End With
Next i
End Sub
在我的循环中,我想根据创建的位置i用文本框中的值的名称替换"Exp" & CStr(i)
。
[如果有人有任何想法,我就参加!如果您有任何问题,我会回答。谢谢。
这应该起作用:
修改您的类以添加对Form对象的引用:
Option Explicit
Public WithEvents CmdEvents As MSForms.CommandButton
Public frm As Object '<<<<<<<<<<<
Private Sub CmdEvents_Click()
Dim Ws As Worksheet
Set Ws = Worksheets("Sheet1")
Dim i As Variant
Dim Nb_equip As Integer
Nb_equip = frm.nbEquipTextBox.Value
For i = 1 To Nb_equip
Ws.Cells(6, 2 + i * 2).Value = frm.Controls("Exp" & CStr(i)).Text
Next i
End Sub
然后在下面添加行:
Set cmdArray(j).CmdEvents = CmdBtn
Set cmdArray(j).frm = Me '<<<<<<<<