Получить и записать значение на листе из текстового поля, созданного динамически в пользовательской форме - PullRequest
0 голосов
/ 24 марта 2020

У меня есть пользовательская форма, которая состоит из TextBox и CommandButton. Введя значение в TextBox, например, 3, и нажав CommandButton, я могу создать 3 новых TextBox с ярлыками, связанными с каждым из них. Он также создает только под этими TextBox и метки другой CommandButton.

Затем я пишу в каждом новом TextBox значение. Например, в первом TextBox я пишу «Банан», во втором «Apple» и т. Д.

Теперь, что я хочу сделать, нажав новый CommandButton, это получить значение из новых TextBoxes и запишите их в лист (например, лист1).

Моя проблема в том, что я не знаю, как получить значение из этих новых текстовых полей, учитывая, что они были созданы во время рутинной работы.

Вот код, связанный с моей пользовательской формой:

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

В моем l oop я хочу заменить "Exp" & CStr(i) именем значения в TextBox в соответствии с позицией i создания.

Если у кого-то есть идеи, я в ! Если у вас есть какие-либо вопросы, я отвечу на них. Спасибо.

1 Ответ

1 голос
/ 24 марта 2020

Это должно работать:

Измените ваш класс, добавив ссылку на объект 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  '<<<<<<<<
...