Excel 从UserForm中动态创建的文本框中获取值并将其写入工作表

Excel 从UserForm中动态创建的文本框中获取值并将其写入工作表,excel,vba,textbox,dynamically-generated,Excel,Vba,Textbox,Dynamically Generated,我有一个由文本框和命令按钮组成的用户表单 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.nb

我有一个由文本框和命令按钮组成的用户表单

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
通过在文本框中输入一个值,例如3,并单击CommandButton,我创建了三个新的文本框,其中每个文本框都链接了标签。它也会在这些文本框的下方创建另一个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
我在每个新文本框中写入一个值。例如,我在第一个文本框中写“香蕉”,在第二个文本框中写“苹果”,依此类推

我想通过单击new CommandButton,从新的文本框中获取值,并将它们写入一张表中

考虑到这些新文本框是在运行期间创建的,如何从中获取值

以下是链接到我的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
在我的循环中,我想根据创建的位置,用文本框中值的名称替换
“Exp”&CStr(I)

这应该可以:

修改类以添加对表单对象的引用:

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
选项显式
Public with events CmdEvents As MSForms.CommandButton

公共frm作为对象“感谢您的回答。它就像一个符咒!问题也来自以下部分
“Exp”&CStr(i)
。我的控件名称是文本框而不是Exp