动态添加组合框的VBA值

时间:2018-04-25 08:39:04

标签: excel vba excel-vba

首先发布在这里。自学成才的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,以便值保持为全局变量?关于该怎么做的任何其他想法?

任何帮助将不胜感激...希望我已经解释得很好!

提前感谢!!

1 个答案:

答案 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