我有一份包含以下信息的清单:
类别 | 项目 |
---|---|
水果 | 橙色 |
蔬菜 | 生菜 |
水果 | 苹果 |
水果 | 梨 |
蔬菜 | 胡萝卜 |
肉 | 鸡 |
我希望创建一个基于类别的下拉列表。因此,如果我选择水果,那么我希望主列表中的所有水果都成为下拉菜单中的选项。
类别选择=水果
下拉选项
橙色
苹果
梨子
我不想在自己的列中创建每个类别列表,因为我只想从我的一个列表中提取下拉选项。在 Excel 中可以吗?
将此代码复制到工作表的代码窗格中。
在功能区上分配一个参考(命令)按钮,或在工作表上为 veget() 子创建一个 ControlButton。
选择数据所在的工作表。单击创建的项目。单击生成的组合框下拉箭头。首先,将出现类别成员。选择一个项目并再次单击下拉箭头。出现所选类别的成员。
要选择新类别,请再次单击参考(命令)按钮。
Dim cl As Integer, filt As String, combo As OLEObject
Private Sub ComboBox1_Change()
Set combo = ActiveSheet.OLEObjects("gt6r43!7lß")
If cl = 2 Then Exit Sub
If cl = 0 Then
ActiveSheet.ShowAllData
cl = 1
filt = combo.Object.text
combo.Object.Clear
Else
Set datarng = Range("A1:A" & Range("A1").End(xlDown).Row)
For Each cell In datarng
If cell = filt Then
combo.Object.AddItem cell.Offset(0, 1).value
End If
Next cell
cl = 2
End If
End Sub
Private Sub veget()
cl = 2
On Error Resume Next
Set combo = ActiveSheet.OLEObjects("gt6r43!7lß")
On Error GoTo 0
If combo Is Nothing Then
ActiveSheet.OLEObjects.Add "forms.combobox.1", , , , , , , 250, 100, 100, 20
Set combo = ActiveSheet.OLEObjects(ActiveSheet.OLEObjects.Count)
combo.Name = "gt6r43!7lß"
End If
Set datarng = Range("A1:A" & Range("A1").End(xlDown).Row)
combo.Object.Clear
datarng.AdvancedFilter xlFilterInPlace, , , True
For Each cell In Range("A2:A" &
Range("A1").End(xlDown).Row).SpecialCells(xlCellTypeVisible).Cells
combo.Object.AddItem cell.value
Next cell
cl = 0
End Sub