重点内容
适用版本
桌面版通用(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 SubAdd 按钮:把勾选的项目转移到第二个列表
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 SubRemove 按钮:从第二个列表移除勾选的项目
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 SubMultiSelect 三种值: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学完你会
常见错误
- 删除多个勾选项目时忘记用
counter追踪编号偏移,导致漏删或删到不该删的项目 MultiSelect的三种模式数值搞混,使用者以为能多选却发现选了新的就取消了旧的- 全选/取消全选的循环忘记用
ListBox1.ListCount - 1当上限,编号超出范围报错
Sources
Blog / Website: