从在用户窗体中动态创建的文本框中获取值并将值写入 sheet
Get and write a value to a sheet from a textbox created dynamically in a UserForm
我有一个由文本框和命令按钮组成的用户窗体。
通过在文本框中输入一个值,例如 3,然后单击命令按钮,我创建了三个新的文本框,每个文本框都带有标签。它还会在那些 TextBox 和 Labels 下创建另一个 CommandButton。
我在每个新的 TextBox 中写入一个值。例如在第一个文本框中我写“Banana”,在第二个“Apple”中等等。
我想通过单击新的命令按钮,从新的文本框中获取值并将它们写入 sheet。
考虑到这些新文本框是在运行期间创建的,我如何从这些新文本框获取值。
这是链接到我的用户表单的代码:
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
这是我创建的 class 以获取这些数据并通过单击第二个命令按钮将它们写入 sheet。
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)
替换为文本框中值的名称。
这应该有效:
修改您的 class 以添加对 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 '<<<<<<<<
我有一个由文本框和命令按钮组成的用户窗体。
通过在文本框中输入一个值,例如 3,然后单击命令按钮,我创建了三个新的文本框,每个文本框都带有标签。它还会在那些 TextBox 和 Labels 下创建另一个 CommandButton。
我在每个新的 TextBox 中写入一个值。例如在第一个文本框中我写“Banana”,在第二个“Apple”中等等。
我想通过单击新的命令按钮,从新的文本框中获取值并将它们写入 sheet。
考虑到这些新文本框是在运行期间创建的,我如何从这些新文本框获取值。
这是链接到我的用户表单的代码:
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
这是我创建的 class 以获取这些数据并通过单击第二个命令按钮将它们写入 sheet。
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)
替换为文本框中值的名称。
这应该有效:
修改您的 class 以添加对 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 '<<<<<<<<