首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一段代码,显式确定工作表列表框选项状态

一段代码,显式确定工作表列表框选项状态

作者头像
fanjy
发布2022-03-04 15:49:04
发布2022-03-04 15:49:04
1K00
举报
文章被收录于专栏:完美Excel完美Excel
运行总次数:0

标签:VBA

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

图1

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

图2

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

图3

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

图4

宏代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
'获取多选列表框中的选定项,并将其列在工作表中原始项列表的右侧列
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才会起作用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档