EP05. “Multicolumn Combo Box 多列组合框”
🔒 登录后可标记已读- 组合框默认只显示一列内容,这篇讲怎么用
ColumnCount让下拉选单同时显示好几列信息(例如电影名+类型) - 并用二维数组一次填好所有数据,不用一条条 AddItem
- 前置知识:05_VBA/12_Array 的二维数组概念
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
打开表单
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
初始化:设置两列、填入二维数组
Private Sub UserForm_Initialize()
ComboBox1.ColumnCount = 2
Dim Films(1 To 5, 1 To 2) As String
Dim i As Integer, j As Integer
Films(1, 1) = "Lord of the Rings"
Films(2, 1) = "Speed"
Films(3, 1) = "Star Wars"
Films(4, 1) = "The Godfather"
Films(5, 1) = "Pulp Fiction"
Films(1, 2) = "Adventure"
Films(2, 2) = "Action"
Films(3, 2) = "Sci-Fi"
Films(4, 2) = "Crime"
Films(5, 2) = "Drama"
ComboBox1.List = Films
End Sub
OK 按钮:读取选中的两列内容
Private Sub CommandButton1_Click()
Unload Me
MsgBox "You selected " & ComboBox1.Value
On Error Resume Next
MsgBox "You like " & ComboBox1.Column(1) & " movies"
End Sub
逻辑说明
ComboBox1.ColumnCount = 2:设置组合框要显示 2 列- 把二维数组直接赋值给
ComboBox1.List,一次性把整批数据填进去,不用一条条AddItem ComboBox1.Value取到第一列(电影名),ComboBox1.Column(1)取到第二列(类型,索引从 0 开始,1 代表第二列)- 加
On Error Resume Next是因为使用者可能自己手打了一个清单里没有的电影名,这种情况下第二列没有对应数据,直接跳过这行避免报错
[截图:点开组合框下拉列表,同时显示电影名称和类型两列内容的效果]
常见错误
- 忘记先设置
ColumnCount,组合框只会显示数组的第一列,看不到第二列信息 Column()的索引从 0 开始,Column(1)其实是第二列,跟直觉的「第 1 列」容易搞混- 使用者手打了清单外的内容却没做错误处理,读取第二列数据时直接报错中断
学完你会
- ✅ 用
ColumnCount让组合框同时显示多列信息 - ✅ 把二维数组直接赋值给
ComboBox1.List,一次性批量填数据 - ✅ 用
ComboBox1.Column(索引)读取除了第一列以外的其他列内容
Sources
Blog / Website: