Первый пост здесь.Самоучка 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, чтобы значения оставались глобальными переменными?Любые другие идеи о том, что делать?
Любая помощь будет оценена ... надеюсь, я хорошо себя объяснил!
спасибо заранее !!