如何根据单元格值将多个组合框ListFillRange更改为命名范围?

时间:2017-04-06 18:04:24

标签: excel vba combobox

我尝试创建多个下拉列表,这些列表根据他们想要使用的列表进行更改。 例如,如果他们将控制单元格更改为" List 1",则所有组合框(ActiveX)都会将其listfillrange更改为" = List 1"。如果控制单元格改为"列表2",则所有组合框将其列表填充范围更新为" = List 2"。有一种方法可以使用数据验证来完成此操作,但我需要能够键入的ComboBox功能,并且下拉列表会更改以显示列表中以键入的字符串开头的项目。

我是VBA的初学者,所以我不完全理解与语言相比的细微差别。我觉得我缺少很多正确的语法。我将搜索中的一些代码混合在一起,但没有一个与我正在寻找的完全匹配,所以我尝试以某种方式改变它。我想我已经捣蛋了很多。我很抱歉啊哈

Dim i As Integer

Private Sub ListChange()
    If Range("B4").Value = "Bonnie" Then
        For i = 1 To 182
'            'Iterate from ComboBox1 to ComboBox182 to change
'            listfillrange to 'Bonnie' named range
            Set cb = Sheet1.Shapes("ComboBox" & i).OLEFormat.Object.Object
            cb.ListFillRange = "=Bonnie"
            Next i
    ElseIf Range("B4").Value = "Christina" Then
        For i = 1 To 182
'            Iterate from ComboBox1 to ComboBox182 to change
'            listfillrange to 'Christina' named range
            Set cb = Sheet1.Shapes("ComboBox" & i).OLEFormat.Object.Object
            cb.ListFillRange = "=Christina"
            Next i
    Else:
        For i = 1 To 182
'            Iterate from ComboBox1 to ComboBox182 to change
'            listfillrange to 'Dianne' named range
            Set cb = Sheet1.Shapes("ComboBox" & i).OLEFormat.Object.Object
            ComboBox.ListFillRange = "=Dianne"
            Next i
    End If
End Sub

另外我提到我喜欢使用ActiveX ComboBoxes,因为它们会在您键入字符串时显示动态更改的下拉列表但我只能通过

自动使组合框显示下拉列表
Private Sub ComboBox1_Change()
    Me.ComboBox1.DropDown
End Sub

Private Sub ComboBox2_Change()
    Me.ComboBox2.DropDown
End Sub

有没有办法缩短这个,或者我必须为182个ComboBox重复这个。

谢谢。

0 个答案:

没有答案