Значения VBA из динамически добавляемого комбинированного списка - PullRequest
0 голосов
/ 25 апреля 2018

Первый пост здесь.Самоучка VBA, поэтому я всегда осознаю, что код может быть не идеальным.В любом случае ...

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

Выполнение этого не составило проблем:

Public Sub UserForm_Activate()
    QuestionsCount = Application.WorksheetFunction.CountA(Sheets("QuestionData").Range("A:A")) - 1
    ResultsCount = Application.WorksheetFunction.CountA(Sheets("QuestionData").Range("B:B")) - 1
    DepartmentCount = Application.WorksheetFunction.CountA(Sheets("QuestionData").Range("C:C")) - 1
    QuestionForm1.ScrollHeight = (QuestionsCount) * 70
    QuestionForm1.Width = 258
    CommandButton1.Top = (QuestionsCount - 1) * 70
    CommandButton1.Left = 42
    CommandButton2.Top = (QuestionsCount - 1) * 70
    CommandButton2.Left = 132

    Dim i As Integer
    Dim QQ(1 To 100) As MSForms.Control
    Dim QA(1 To 100) As MSForms.Control
    For i = 5 To QuestionsCount
        Set QQ(i) = QuestionForm1.Controls.Add("Forms.Label.1")
        Set QA(i) = QuestionForm1.Controls.Add("Forms.ComboBox.1")
        With QQ(i)
            .Caption = Sheets("QuestionData").Range("A" & (i + 1))
            .Width = 84
            .Top = i * 58
            .Left = 24
            .Name = "Label" & i
        End With
        With QA(i)
            .RowSource = "QuestionData!B2:B" & ResultsCount + 1
            .Width = 96
            .Top = i * 58
            .Left = 138
            .Name = "Combo" & i
            .Value = ""
        End With
    Next i
End Sub

Создана пользовательская форма и все вопросы, которые я хочу найти (расположение командных кнопок не велико, я знаю, скоро это исправят))

Единственная проблема - брать значения.Ответы находятся в ComboBox, пользователь выберет нужные ответы и нажмет кнопку «Отправить».Идея состояла в том, чтобы затем взять значения из каждого comboBox и поместить их в другой лист.У меня проблема в том, что глобальные переменные исчезают в конце подпрограммы.Поэтому, когда пользователь вставляет свои ответы и нажимает кнопку «Отправить», макрос пытается получить значения, которых там нет.

Как называются добавленные поля со списками?Где хранятся их значения?Есть ли способ не End Sub, чтобы значения оставались глобальными переменными?Любые другие идеи о том, что делать?

Любая помощь будет оценена ... надеюсь, я хорошо себя объяснил!

спасибо заранее !!

1 Ответ

0 голосов
/ 25 апреля 2018

Вы назвали свои комбинированные списки, используя .Name = "Combo" & i.

Таким образом, вы можете создать подпрограмму, которая запускается при нажатии кнопки SUBMIT или аналогичной, которая считывает значения с помощью:

QuestionForm1.Controls("Combo5").Value

Вы также можете настроить это как цикл для построения массива с:

Private Sub CommandButton1_Click()

    ResultsCount = Application.WorksheetFunction.CountA(Sheets("QuestionData").Range("B:B")) - 1
    Dim chosenvalue(100)

    For i = 5 To ResultsCount
        chosenvalue(i) = QuestionForm1.Controls("Combo" & i).Value
        Debug.Print "Button " & i & " set to " & chosenvalue(i)
    Next

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