【发布时间】:2018-04-25 08:39:04
【问题描述】:
第一次发帖。自学 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 中获取值并将它们放入另一张表中。
我遇到的问题是全局变量似乎在子结束时消失了。因此,当用户插入答案并单击提交时,宏会尝试获取不存在的值。
添加的组合框的名称是什么?它们的值存储在哪里?有没有办法不结束 Sub 以使值保持为全局变量?还有其他的想法吗?
任何帮助将不胜感激...希望我已经很好地解释了自己!
提前致谢!!
【问题讨论】:
-
不确定我是否理解您的问题,但是否要在隐藏表单后获取
ComboBoxes的值?然后,即使表单不可见,您仍然可以访问ComboBoxes。您可以在模块中声明一个公共变量(即Public oMyForm as New <your form name here>)。然后,您可以通过简单地访问此对象来访问 UDF 中的任何表单对象或表单属性(即oMyForm.myCombobox.Value.. 其中myCombobox将是您的组合框的实际名称)