MICROSOFT

EP04. “Multiple List Box Selections 列表框多选设置”

首页 Microsoft 工具 Excel · VBA · Userform · EP04
约 7 分钟· #EP04#Excel#Userform
🔒 登录后可标记已读
  • 列表框默认只能选一项,这篇讲怎么用 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:

  1. Multiple List Box Selections