填充combobox问题 – 每次select框时重复的值,并且命名范围不填充

我是新来的VBA和StackOverflow,所以我提前道歉,任何错误。

我有一个用户窗体,最终将有16个combobox。 所有这些combobox中的16个将具有相同的5个调查响应选项)。

我的第一个尝试是像这样填充它们,每个combobox重复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 

但是,当我testing表单时,不止一次selectcombobox复制响应选项。 所以,如果我点击它,一切都很好。 第二次,我看到3组响应选项,等等。 这是为什么? 我能做些什么来防止它?

其次,为了避免重复上述代码16次,我find了这个链接,并试图使其适应我的目的:

 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 

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

提前致谢。

您最初使用DropButtonClick事件。

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

因此,你第一次点击下拉菜单,第二次显示一次。

您也可以通过循环遍历每个combobox来编写更less的代码,并将相同的选项应用于每个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_Initialize中的UserForm_Initialize事件中使用上述代码。

更新If声明:

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

在第一个例子中,每当下拉button被点击给定的combobox时,事件就会触发。 因此,当表单加载时,没有可用的选项。 当用户第一次点击第一个combobox的下拉菜单时,事件触发,你的代码添加了5个选项。 用户select一个选项并继续。

后来,用户意识到她想改变对第一个问题的回答。 她再次单击第一个combobox的下拉button; 然后你的代码再次执行,增加5个选项,每个选项都是重复的。

我看到你已经修复了Initialize事件代码来做你想做的事情; 我相信这是一个比你的第一个更好的select。 但是,如果您希望修改原始代码,请首先添加一行检查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