首先发布在这里。自学成才的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
创建了Userform,我想要的所有问题都在那里(命令按钮的位置不是很好,我知道,很快就会解决这个问题)
唯一的问题是取值。答案在ComboBox中,用户将选择他们想要的答案,然后单击“提交”按钮。我们的想法是从每个comboBox
获取值并将它们放入另一张表中。
我遇到的问题是全局变量似乎在子结束时消失了。因此,当用户插入他们的答案并单击“提交”时,宏会尝试获取不存在的值。
添加的ComboBoxes的名称是什么?他们的价值存储在哪里?有没有办法不结束Sub,以便值保持为全局变量?关于该怎么做的任何其他想法?
任何帮助将不胜感激...希望我已经解释得很好!
提前感谢!!
答案 0 :(得分:0)
您已使用.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