vba实现excel二级联动多选功能

要求

二级菜单需要根据一级菜单的不同变换内容

二级菜单为多选框,选择后,以逗号分隔显示在单元格内

实现

先上效果图,如下图图一所示,这里面是excel2013版本

图一效果图

数据源放在了sheet2里面,数据源如下图二所示。这里,使用第一行为第一级即H列的数据源【H列加数据验证为序列,源为sheet2的第一列,度娘有很详细的步骤】;I列根据H列的不同,加载对应列为多选的选项。

图二数据源

在编写代码的时候,一定要记得先加控件,步骤图如下图三所示,图四是控件的属性图,另外,请先确定启用了宏和开发工具【度娘有详细教导】。控件名字为ListBox1,放在I列。右键sheet1--查看代码---在编辑器里面针对它进行了一系列编码,这里也附上了编码,代码是我拼凑过来的,我知道不好看,但是好在实现了,,,,,祝好吧。

图三添加控件

图四控件属性

小结

  老大是想让我一天实现,但是,臣无能啊~第一天都在看二级联动菜单,发现不需要vba啊,度娘说数据验证就能实现了,第二天反应过来了,需要的是多选框,期间调试代码的时候一脸懵逼,就说我控件未定义,后来,老大来了,一脸黑线的帮我在界面拖出个控件,,,,,我控件都没有,编了一堆代码有何用,,,,,,

 1 Option Explicit
 2     Dim t As String
 3     Dim Reload As Boolean
 4 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 5     ActiveCell.Value = ListBox1.Value
 6     Me.ListBox1.Clear
 7     Me.ListBox1.Visible = False
 8 End Sub
 9 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
10     Dim i As Integer
11     Dim j As Integer
12     Dim Y As Integer
13     Dim Z As Integer
14     Dim arr1 As Variant, arr2 As Variant
15     Dim myStr As String
16     Dim columName As String
17     Dim X As String
18     Me.ListBox1.Clear
19
20
21     If Target.Count = 1 Then ‘单击一个单元格有效,多选无效
22
23         With Me.ListBox1
24              If Target.Column = 11 And Target.Row > 2 Then
25                 If Cells(Target.Row, Target.Column - 1) <> "" Then ‘上级没有数据,不显示多选框
26               columName = Cells(Target.Row, Target.Column - 1)
27               For Y = 1 To 100
28               If Sheet2.Cells(1, Y) = columName Then ‘根据列名得到列号A、B之类的
29                  Z = Y
30                  If Y > 26 Then
31                  X = Mid(Cells(1, Y).Address, 2, 2) ‘这是处理AA、AB,即26列以后的情况
32                  Else
33                  X = Mid("ABCDEFGHIJKLMNOPQRSTUVWXYZ", Y, 1)
34                  End If
35               End If
36               Next
37               [B5] = X ‘这是当时用来查看结果的,然后忘记删掉了,,,,,,bless
38               With Sheet2 ‘加载多选项
39                 arr1 = .Range(X & "2:" & X & .Range(X & "65535").End(xlUp).Row)
40                 If .Range(X & "65535").End(xlUp).Row <> 2 Then
41                 For j = 1 To .Range(X & "65535").End(xlUp).Row - 1
42
43                     Me.ListBox1.AddItem arr1(j, 1)
44
45                 Next j
46                 Else
47                     Me.ListBox1.AddItem Sheet2.Cells(2, Z)
48                 End If
49               End With
50                 t = ActiveCell.Value
51                 Reload = True
52                 For i = 0 To .ListCount - 1
53                      If InStr(t, .List(i)) Then
54                         .Selected(i) = True
55                      Else
56                         .Selected(i) = False
57                      End If
58                 Next
59                 Reload = False
60                 .Top = ActiveCell.Top + ActiveCell.Height
61                 .Left = ActiveCell.Left
62                 .Width = ActiveCell.Width
63                 .Visible = True
64
65                 Else
66                 .Visible = False ‘监听到非此列时,隐藏复选框
67                 End If
68             Else
69             .Visible = False
70             End If
71             t = ""
72         End With
73
74     End If
75 End Sub
76 Private Sub ListBox1_Change()
77     Dim i As Integer
78     Dim flag As Boolean
79     flag = False
80     If Reload Then Exit Sub
81     For i = 0 To Me.ListBox1.ListCount - 1
82         If Me.ListBox1.Selected(i) = True Then
83         t = t & "," & Me.ListBox1.List(i)
84         flag = True
85         End If
86     Next
87     If flag = False Then
88         t = ""
89     End If
90     ActiveCell.Value = ""
91     ActiveCell = Mid(t, 2)
92     t = ""
93 End Sub

代码

原文地址:http://www.cnblogs.com/chanmao--/p/6294548.html

原文地址:http://www.cnblogs.com/chanmao--/p/6294548.html

时间: 2024-12-16 00:37:30

vba实现excel二级联动多选功能的相关文章

jquery小练习 单选多选 二级联动 员工信息的添加与删除

单选多选与全选 就是点击按钮从左边把内容一道右边 <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>    </head>    <script type="text/javascript" src="js/jquery-3.4.1.min.js&qu

Excel催化剂100+大主题功能梳理导读

Excel催化剂历经1年4个月的开发时间,终于荣登100+个大主题功能,完成数据领域的功能大矩阵,可以说在日常的数据处理及分析上,绝大部分的共性场景已经囊括其中,是数据工作者难得一遇的优秀作品之一.因开发过程没有系统性的规划,难免开发过程中的功能发布较为凌乱,特别是对初次接触的用户来说,很需要一个系统性的概览梳理,今天此文正是为此而准备的. 功能大模块 在100+的主题功能中,以下将尝试通过几个维度来作简单的梳理,希望能够对初次接触的朋友们可以更加清晰地了解Excel催化剂能够给自己的日常工作带

省市二级联动

先是构建好HTML代码,通过下拉框来实现功能: 通过jQuery来实现代码: 1.先要引入jar包 2.接下里10步完成二级联动效果:主要是定位获取用户选择的省份--------清楚第二个下拉列表中的内容----创建二维数组用于存放省份和城市----遍历二维数组中的省份- ---判断用户选择的省份和遍历的省份----遍历该省份下面所的城市----创建城市文本节点----创建option元素节点-- --将城市节点存放到option节点中去----将option节点追加到第二个下拉列表中去 3.具

Spring MVC中Ajax实现二级联动

今天写项目遇到了二级联动,期间遇到点问题,写个博客记录一下. 后台Controller: @RequestMapping("/faultType") @ResponseBody public Map<String,Object> faultType(int id,HttpServletRequest request)throws IOException { String ReturnMessage = ""; //获取所有子类故障类型 List<F

Extjs二级联动 Extjs combo 省 城市

Extjs二级联动 Extjs combox根据省查询城市 实现效果如上图所示, store层代码: 1 Ext.define("ExtApp.store.TeacherProvince",{ 2 extend:"Ext.data.Store", 3 fields:['provinceCode','provinceName'], 4 autoLoad:true, 5 proxy:{ 6 type:"ajax", 7 url : 'getProvi

VBA在Excel中的应用(三)

目录  Chart Export Chart Format Chart Lengend  Chart Protect  Chart Title  Chart Chart Export 1. 将Excel中的图表导出成gif格式的图片保存到硬盘上 Sub ExportChart()     Dim myChart As Chart     Set myChart = ActiveChart     myChart.Export Filename:="C:\Chart.gif", Filt

ComboGrid二级联动以及给二级联动赋默认值

//调用二级联动方法$(function () { combogridTwo("#upAdClass","#upAdPage");//连接地址二级联动方法封装 修改 combogridTwo("#adAdClass","#adAdPage");//连接地址二级联动方法封装 添加 } /* * @Description combogrid 二级联动方法封装 * * @Author wzf * @Date 2018/10/27 1

JS制作二级联动

JS制作二级联动 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="

jQuery_完成省市二级联动

当填表的时候会让你设计某省某市怎么设计,应该明白,如果你选择了一个确定的省,那么在第二个下拉框内则不会有除了你选择的省的市之外的名称.而这功能用js来实现很麻烦,但是用jq确很容易实现. 原表结构: 代码如下: <!DOCTYPE html> <html> <head> <script typr="text/javascript" src="js/jquery-1.8.3.js"></script> <