Excel利用宏VBA代码添加复选
Excel利用宏VBA代码添加复选

Excel利用宏VBA代码添加复选

起因:给河南省各地市联通公司发需求表中有一个多选项

首先需要创建一个表二自行命名,需要根据表中要多选的表头及内容加入写入表二中

打开开发工具,这样便可以在标题中找到开发工具

开启宏信任,启用宏

开发工具选项卡→控件选项组→插入→ActiveX控件→列表框(ActiveX控件)

随便框选画一个位置(可再调整)

右键画出来的位置-属性

数据分类中的ListStyle选1-fmListStyleOption

行为分类中的MultiSelect选1-fmMultiSelectMulti

ListFillRange填写复选选项的位置:如在这里是–(sheet表名)!A2:A5

选好之后是这样

查看代码-编写Sheet1代码

代码

注意If ActiveCell.Column = 4 And ActiveCell.Row > 1 Then 中的4为我demo表中的第四列可自行修改

'--------------------

Private Sub ListBox1_Change()

    '加载ListBox1

    If Reload Then Exit Sub

    For i = 0 To ListBox1.ListCount - 1

    If ListBox1.Selected(i) = True Then t = t & "," & ListBox1.List(i)

    Next

    ActiveCell = Mid(t, 2)

End Sub

'---------------------

'sdsadsds


Private Sub ListBox2_Change()

    '加载ListBox2

    If Reload Then Exit Sub

    For i = 0 To ListBox2.ListCount - 1

    If ListBox2.Selected(i) = True Then t = t & "," & ListBox2.List(i)

    Next

    ActiveCell = Mid(t, 2)

End Sub

'-------------------

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'设置ListBox1

With ListBox1

     '第 n 列 且 单元格大于 1,因为表头的字段不需要进行多选

     '在这里,ActiveCell.Column是录入位置所在的列,根据需要调整。在本题中为第1列,n=1,就为1。

     '在这里,ActiveCell.Row是录入位置所在的行,根据需要这调整。在本题中录入位置从第2行开始,就为2-1=1。

     If ActiveCell.Column = 4 And ActiveCell.Row > 1 Then

     t = ActiveCell.Value

     Reload = True '如果是根据单元格的值修改列表框,则暂时屏蔽listbox的change事件。

     For i = 0 To .ListCount - 1 '根据活动单元格内容修改列表框中被选中的内容

     If InStr(t, .List(i)) Then

     .Selected(i) = True

     Else

     .Selected(i) = False

     End If

     Next

     Reload = False

     .Top = ActiveCell.Top + ActiveCell.Height '以下语句根据活动单元格位置显示列表框

     .Left = ActiveCell.Left

     .Width = ActiveCell.Width

     .Visible = True

     Else

     .Visible = False

     End If

     End With
End Sub

调试-编译VAB即可

如果有下方提示,将文件另存为-保存为启用宏的工作簿.xlsm形式再打开运行即可

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注