标签:VBA
使用功能区“开发工具”选项卡,我们可以在工作表中插入控件,例如,可以插入列表框控件,如下图1所示。

图1
插入列表框控件后,单击右键,选择“设置控件格式”命令,可以选取“选定类型”中的“复选”,从而允许我们同时选取列表框中的多个项目,如下图2所示。

图2
然而,Excel并没有提供给我们指示在工作表中列出了多个选项,所链接的单元格只是显示0,如下图3所示。

图3
下面是在mrexcel.com中看到的一段代码,通过在工作表中项目列表右侧的列中显示用户的选择状态来解决此问题,如下图4所示。只需如上图2所示设置列表框(无需包含单元格链接),然后右键单击该列表框并指定下面的宏。

图4
宏代码如下:
'获取多选列表框中的选定项,并将其列在工作表中原始项列表的右侧列
Sub getSelections()
   Dim V As Variant
   Dim V2 As Variant
   Dim i As Long
   Dim n As Long
   Dim lb As Long
   Dim adjust As Long
   With ActiveSheet.ListBoxes(Application.Caller)
        '获取表示选择状态的一维数组, TRUE/FALSE
        V = .Selected
        n = UBound(V)
        ReDim V2(n, 1)
        '除非设置了OptionBase 1,否则下限为0
        lb = LBound(V2, 2)
        '如果是零,那么需要小心,因为V中的列表的下限是1
        If lb = 0 Then adjust = 1
        For i = lb To n - adjust
            V2(i, lb) = V(i + adjust)
        Next i
        '粘贴数组
        Range(.ListFillRange).Cells(1,1).Offset(0, 1).Resize(n, 1) = V2
   End With
End Sub注意,必须将该宏指定给列表框后,Application.Caller才会起作用。