使用 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
我有一个用户窗体,其中有两个名称为 "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