从在用户窗体中动态创建的文本框中获取并在工作表中写入值

问题描述 投票:0回答:1

我有一个由文本框和命令按钮组成的用户窗体。通过在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)

[如果有人有任何想法,我就参加!如果您有任何问题,我会回答。谢谢。

excel vba textbox dynamically-generated
1个回答
1
投票

这应该起作用:

修改您的类以添加对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  '<<<<<<<<
© www.soinside.com 2019 - 2024. All rights reserved.