Microsoft Lab
全部软件
Excel用户窗体(Userform)约 5 分钟

Multicolumn Combo Box 多列组合框

重点内容


适用版本

桌面版通用(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 列」容易搞混
  • 使用者手打了清单外的内容却没做错误处理,读取第二列数据时直接报错中断

学完你会

Sources

Blog / Website:

  1. Multicolumn Combo Box
只记在你的浏览器里,换设备不会同步。