EP04. “Multiple List Box Selections 列表框多选设置”
🔒 登录后可标记已读- 列表框默认只能选一项,这篇讲怎么用
MultiSelect属性开放多选 - 做一个「左边列表勾选想要的项目、按 Add 加到右边列表、按 Remove 移除」的完整互动表单
- 也讲全选/取消全选复选框怎么写
- 前置知识:05_VBA/15_ActiveX Controls/EP02 列表框的基本操作
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
打开表单
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
初始化:填选项、预设选取模式
Private Sub UserForm_Initialize()
With ListBox1
.AddItem "Sales"
.AddItem "Production"
.AddItem "Logistics"
.AddItem "Human Resources"
End With
OptionButton3.Value = True
End Sub
Add 按钮:把勾选的项目转移到第二个列表
Dim i As Integer
Private Sub CommandButton1_Click()
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i)
Next i
End Sub
Remove 按钮:从第二个列表移除勾选的项目
Private Sub CommandButton2_Click()
Dim counter As Integer
counter = 0
For i = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(i - counter) Then
ListBox2.RemoveItem (i - counter)
counter = counter + 1
End If
Next i
CheckBox2.Value = False
End Sub
📌 移除时用 counter 追踪已经删掉几项——因为每删一项,后面项目的编号都会往前移一位,不减掉 counter 会漏删或删错。
三个选项按钮:切换选取模式
Private Sub OptionButton1_Click()
ListBox1.MultiSelect = 0
ListBox2.MultiSelect = 0
End Sub
Private Sub OptionButton2_Click()
ListBox1.MultiSelect = 1
ListBox2.MultiSelect = 1
End Sub
Private Sub OptionButton3_Click()
ListBox1.MultiSelect = 2
ListBox2.MultiSelect = 2
End Sub
MultiSelect 三种值:0(单选)、1(可以直接多选,点一下就选中/取消)、2(扩展多选,要配合 Shift/Ctrl 才能多选)。
[截图:运行中的表单,左边列表框勾选了好几个部门项目,点击 Add 后这些项目出现在右边的第二个列表框]
MultiSelect 模式怎么选
| 值 | 模式 | 适合场景 |
|---|---|---|
| 0 | 单选 | 只允许选一项 |
| 1 | 简单多选 | 想让使用者一格一格点选/取消,不用按住 Ctrl |
| 2 | 扩展多选 | 习惯 Windows 传统操作(Shift 连选、Ctrl 加选)的使用者 |
全选/取消全选复选框
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
For i = 0 To ListBox1.ListCount - 1
ListBox1.Selected(i) = True
Next i
End If
If CheckBox1.Value = False Then
For i = 0 To ListBox1.ListCount - 1
ListBox1.Selected(i) = False
Next i
End If
End Sub
学完你会
- ✅ 用
MultiSelect属性开放列表框多选,分辨三种模式的差异 - ✅ 用
Selected(i)判断哪些项目被勾选,配合循环批量转移 - ✅ 从右边列表删除项目时,知道要用 counter 抵消编号偏移,避免漏删
常见错误
- 删除多个勾选项目时忘记用
counter追踪编号偏移,导致漏删或删到不该删的项目 MultiSelect的三种模式数值搞混,使用者以为能多选却发现选了新的就取消了旧的- 全选/取消全选的循环忘记用
ListBox1.ListCount - 1当上限,编号超出范围报错
Sources
Blog / Website: