Передача значения обратно в лист Excel из динамически созданной формы VBA - PullRequest
0 голосов
/ 21 апреля 2020

Я создал форму, которая будет генерироваться динамически в зависимости от количества заполненных строк, находящихся в заданном диапазоне, и это работает без проблем.

Однако в этой форме я хочу иметь несколько флажков, которые будут соответствуют значениям в листе Excel. Представьте, что это своего рода параметр конфигурации.

Флажки создаются динамически, потому что я никогда не знаю, сколько будет настроек, и названы динамически, но я не могу передать значение флажка (T или F) вернуться к рабочему листу.

Код для создания пользовательской формы

    Private Sub UserForm_Initialize()
    Dim edtBox_n As Control
    temp_lastRow = Worksheets("Sources").UsedRange.Rows.Count
    temp_count = Application.WorksheetFunction.CountA(Range("A1:A" & temp_lastRow))

    Me.Height = 60 + (temp_count * 24)

    For x = 2 To temp_count

    Set edtBox_n = Me.Controls.Add("Forms.label.1", "ca" & x, True)
    With edtBox_n
        .Caption = Worksheets("Sources").Range("A" & x).Value
        .Top = 12 + (24 * x)
        .Left = 18
        .Height = 18
        .Width = 170
    End With


    Set edtBox_n = Me.Controls.Add("Forms.checkbox.l", "cacb" & x, True)
    With edtBox_n
        .Caption = edtBox_n.Name ' check to find the name of the check box, usually blank
        .Value = Worksheets("Sources").Range("B" & x).Value
        .Top = 12 + (24 * x)
        .Left = 210
        .Height = 18
    End With


    Next x


    End Sub

Код кнопки возврата / отправки для передачи значений флажков обратно в лист Excel

    Private Sub CommandButton1_Click()

    temp_lastRow = Worksheets("Sources").UsedRange.Rows.Count
    temp_count = Application.WorksheetFunction.CountA(Range("A1:A" & temp_lastRow))


    For x = 2 To temp_count

    Worksheets("Sources").Range("B" & x).Value = "cacb" & x.Value

    Next x

    End Sub

1 Ответ

1 голос
/ 21 апреля 2020

Вам действительно нужно сослаться на элемент управления. Поэтому вместо "cacb" и x.Value попробуйте Me.Controls ("cacb" & x). Значение - Брайан М Стаффорд

Спасибо, я добавил это предложение и теперь оно отлично работает.

Private Sub CommandButton1_Click()

temp_lastRow = Worksheets("Sources").UsedRange.Rows.Count
temp_count = Application.WorksheetFunction.CountA(Range("A1:A" & temp_lastRow))


For x = 2 To temp_count
Worksheets("Sources").Range("B" & x).Value = Me.Controls("cacb" & x).Value

Next x
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...