使用 VBA 依赖于单元格范围的组合框(更改事件)

Combobox (change event) dependent on Cell Range using VBA

我有一个用户窗体,其中有两个名称为 "Combobox1" 和 "Combobox2" 的组合框。在我的 Excel sheet 名称 "Sheet1" 中,我有 A 列和 B 列,它们在组中有一些值。

目标:我想将 Combobox2 值显示为 B 列值,但它应该取决于选择时的 A 列值。我尝试了下面的代码,但不明白我哪里出错了。

Private Sub Combobox1_Change()
    'interlink dropdown box
    Dim index As Integer
    index = Combobox1.ListIndex

    Select Case index
    Case Is = 0
            With Combobox2
                 Me.Combobox2.Clear
                 Worksheets("Sheet1").Range("B11:B13").Value

            End With
    Case Is = 1
            With Combobox2
                Me.Combobox2.Clear
                Worksheets("Sheet1").Range("B14:B16").Value

            End With
    Case Is = 2
            With Combobox2
                Me.Combobox2.Clear
                Worksheets("Sheet1").Range("B17:B19").Value
            End With
    End Select
End Sub


Private Sub UserForm_Initialize()    
    Me.Combobox1.AddItem "1"
    Me.Combobox1.AddItem "2"
    Me.Combobox1.AddItem "3"    
End Sub

所需输出:

您必须像在 UserForm_Initialize 中那样添加项目。此外,我建议使用辅助函数来迭代元素 (AddItemsToComboBox):

Option Explicit

Private Sub Combobox1_Change()
    Dim varCombox2Items As Variant
    Select Case ComboBox1.Value
    Case "1"
        AddItemsToComboBox ComboBox2, Worksheets("Sheet1").Range("B11:B13").Value
    Case "2"
        AddItemsToComboBox ComboBox2, Worksheets("Sheet1").Range("B14:B16").Value
    Case "3"
        AddItemsToComboBox ComboBox2, Worksheets("Sheet1").Range("B17:B19").Value
    Case Else
        AddItemsToComboBox ComboBox2, Array("Ivalid Value in ComboBox1")
    End Select
End Sub

Private Sub UserForm_Initialize()
    AddItemsToComboBox ComboBox1, Array("1", "2", "3")
End Sub

Private Sub AddItemsToComboBox(cobTarget As MSForms.ComboBox, varItems As Variant, Optional blnClear As Boolean = True)
    If blnClear Then
        cobTarget.Clear
    End If
    Dim varItem As Variant: For Each varItem In varItems
        cobTarget.AddItem CStr(varItem)
    Next varItem
End Sub