2016-02-26 72 views
1

我是VBA和StackOverflow的新手,所以我提前为任何错误道歉。填充组合框问题 - 每次选择框都会有重复值,并且命名范围不会填充

我有一个UserForm,最终将有16个组合框。所有这些ComboBoxes中的16个将具有相同的5个调查响应选项)。

我第一次尝试来填充他们这样,反复对每个组合框16次:

Private Sub cboAE1A_DropButtonClick() 
    'Populate control. 
    Me.cboAE1A.AddItem "Strongly disagree" 
    Me.cboAE1A.AddItem "Disagree" 
    Me.cboAE1A.AddItem "Neither agree nor disagree" 
    Me.cboAE1A.AddItem "Agree" 
    Me.cboAE1A.AddItem "Strongly agree" 
End Sub 

当我测试的形式,但是,选择组合框不止一次重复了应对方案。所以,如果我点击它,一切都很好。第二次,我看到3组响应选项,等等。这是为什么?我能做些什么来防止它?

其次,在试图避免重复上面的代码16次,我发现这个link并努力去适应它为我的目的:

Private Sub ufrmGenderTraining_Initialize() 
    'Populate AE1A combo box. 
    Dim rngRespuestas As Range 
    Dim ws As Worksheet 
    Set ws = Sheets("INPUTS") 
    For Each rngRespuestas In ws.Range("Respuestas") 
    Me.cboAE1A.AddItem rngRespuestas.Value 
    Next rngRespuestas 
End Sub 

但组合框为空。任何想法如何解决它,以及如何有效地填充这16个组合框与相同的列表?如果你还可以像我5岁那样解释,那将非常感激!

在此先感谢。

+0

好吧,我想通了,为什么我的问题的第二部分是行不通的!请忽略这一点。仍然好奇,为什么,在第一次尝试中,它是复制每个组合框的选择的响应。 – 406LQE

+0

cboAE1A_DropButtonClick()每次单击放置按钮时都会运行,因此它会按照您的要求重新添加每个项目。每个'.AddItem'行应该移动到'ufrmGenderTraining_Initialize()'子,因为这只能运行一次 – snoopen

回答

0

您最初是使用DropButtonClick事件。

这意味着每次点击ComboBox时,它会将相同的项目添加到ComboBox列表中。

因此,你点击下拉它第一次显示一次,第二次等

两次您也可以通过每个组合框循环和应用相同的选择,他们每个人写更少的代码。示例:

Dim comboItems() As Variant 
Dim ct As Control 
Dim i As Long 

comboItems() = Array("Strongly disagree", _ 
        "Disagree", _ 
        "Neither agree nor disagree", _ 
        "Agree", _ 
        "Strongly agree") 

For Each ct In Me.Controls 

    If TypeName(ct) = "ComboBox" Then 

     For i = LBound(comboItems) To UBound(comboItems) 
      ct.AddItem comboItems(i) 
     Next i 

    End If 

Next ct 

确保在UserForm中的UserForm_Initialize事件中使用上述代码。

更新If声明:

If TypeName(ct) = "ComboBox" And _ 
    ct.Name <> "cboGender" And _ 
    ct.Name <> "cboDepartment" Then 
+0

谢谢你的帮助!循环运作良好,但我忘了提及我有两个其他组合框具有不同的选项列表。我将如何排除循环中的那些?他们是cboGender和cboDepartment。 – 406LQE

+0

没问题 - 查看更新后的答案('如果'语句需要附加条件) –

0

在第一个示例中,每次单击下拉按钮以指定组合框时,该事件都会触发。因此,当表单加载时,没有可用的选项。当用户首次点击第一个ComboBox的下拉菜单时,事件触发,您的代码添加了5个选项。用户选择一个选项并继续。

后来,用户意识到她想改变她对第一个问题的回答。她再次单击第一个ComboBox的下拉按钮;然后您的代码再次执行,再添加5个选项,其中每个选项都是重复的。

我看到你已经修复了Initialize事件代码来做你想做的事情;我相信这是比你的第一个更好的选择。但是,如果您希望修改原始代码,请首先添加一行检查ComboBox的ListCount属性的行。如果ComboBox已经填充了响应,这将阻止添加选项。

Private Sub cboAE1A_DropButtonClick() 
'Check for existence of items 
If Me.cbo.AE1A.ListCount = 0 Then 
    'Populate control. 
    Me.cboAE1A.AddItem "Strongly disagree" 
    Me.cboAE1A.AddItem "Disagree" 
    Me.cboAE1A.AddItem "Neither agree nor disagree" 
    Me.cboAE1A.AddItem "Agree" 
    Me.cboAE1A.AddItem "Strongly agree" 
End If 
End Sub