从在用户窗体中动态创建的文本框中获取值并将值写入 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  '<<<<<<<<