Excel 2010 VBA 入门 130 利用窗体创建实时筛选浮动工具栏
目录
题
码
DefauIt和CanceI按钮
提高单元格隐藏的速度
自制浮动工具栏
动态显示与隐藏窗体
题
如图所示,该表为某单位员工档案。现希望制作一个包含有文本框的浮动工具栏,当在文本框中输入字符并按【Enter】键后,对该表进行模糊查找,将该表中不含有该字符的所有记录隐藏。
序号 | 姓名 | 科室 | 级别 | 身份 | 职称 | 受聘专业 | 性别 | 出生年月 | 年龄 | 参工时间 | 工作年限 | 入院时间 | 入院年限 | 职务 | 等级 | 身份证号 | 党员团员 |
1 | 张201101 | 后勤科 | 中级 | 干部 | 主治医师 | 医生 | 男 | 1954-01-04 | 59 | 1970/9/1 | 42 | 1970/7/1 | 43 | 八 | 520615195401043134 | ||
2 | 王201102 | 疾控科 | 中级 | 干部 | 主治医师 | 医生 | 男 | 1954-10-06 | 58 | 1977/4/1 | 36 | 1977/4/1 | 36 | 九 | 520615195410063137 | ||
3 | 李201103 | 外妇科 | 中级 | 干部 | 主治医师 | 医生 | 女 | 1956-08-13 | 56 | 1977/2/1 | 36 | 1977/7/1 | 36 | 副院长 | 十 | 520615195608133145 | 中共党员 |
4 | 赵201104 | 西医科 | 中级 | 干部 | 主治医师 | 医生 | 男 | 1956-04-09 | 57 | 1972/3/1 | 41 | 1986/1/1 | 27 | 工会主席 | 十一 | 520615195604093158 | |
5 | 周小军 | 放射科 | 中级 | 干部 | 主治医师 | 医生 | 男 | 1958-10-22 | 54 | 1979/3/1 | 34 | 1989/12/1 | 23 | 十二 | 520615195810223873 | ||
6 | 吴201106 | 外妇科 | 中级 | 干部 | 主治医师 | 医生 | 女 | 1959-06-16 | 54 | 1978/4/1 | 35 | 1985/1/1 | 28 | 十三 | 52061519590616314X | ||
7 | 梁201107 | 西药房 | 初级 | 干部 | 医士 | 药剂 | 男 | 1960-01-20 | 53 | 1993/12/1 | 19 | 1993/12/1 | 19 | 八 | 52061519600120313X | ||
8 | 闫201108 | 疾控科 | 初级 | 干部 | 医士 | 医生 | 男 | 1961-10-03 | 51 | 1989/12/1 | 23 | 1989/1/1 | 24 |
预防保健科 科长 |
九 | 520615196110033133 | |
9 | 王201109 | 疾控科 | 初级 | 干部 | 医师 | 医生 | 男 | 1961-11-22 | 51 | 1979/7/1 | 34 | 2003/1/1 | 10 | 十 | 520615196111223633 | 中共党员 | |
10 | 李201110 | 口腔科 | 初级 | 干部 | 医师 | 医生 | 男 | 1962-01-07 | 51 | 1999/7/1 | 14 | 2001/1/1 | 12 | 十一 | 520615196201073130 | ||
11 | 赵201111 | 手术室 | 初级 | 干部 | 医师 | 护士 | 女 | 1962-03-27 | 51 | 1981/12/1 | 31 | 1981/12/1 | 31 | 护士长 | 十二 | 520615196203273144 | |
12 | 周201112 | 西医科 | 中级 | 干部 | 主治医师 | 医生 | 男 | 1962-10-24 | 50 | 1984/7/1 | 29 | 1986/1/1 | 27 | 十三 | 520615196210243138 | ||
13 | 吴201113 | 内儿科 | 初级 | 干部 | 护师 | 护士 | 女 | 1964-08-02 | 48 | 1981/12/1 | 31 | 2006/10/1 | 6 | 八 | 520615196408023149 |
码
步骤1 按组合键【Alt+F11】打开VBE。
步骤2 选择菜单“插入”→“用户窗体”,并在窗体中添加一个TextBox控件和一个CommandButton控件。然后调整窗体大小和控件位置,使按钮控件隐藏,如图所示。
步骤3 在“工程资源管理器”中右键单击之前插入的窗体,选择“查看代码”,并输入以下代码。
Option ExplicitPrivate Sub CommandButton1_Click()Dim rowData As LongDim colData As LongDim shtData As WorksheetDim sKey As StringDim bln As BooleanDim rng As RangeApplication.ScreenUpdating = FalseSet shtData = Sheet1sKey = Me.TextBox1.TextWith shtData.Rows.Hidden = False'把不含查询内容的行隐藏,含查询内容的为假,否则为真For rowData = 2 To .Range("A1").CurrentRegion.Rows.Countbln = TrueFor colData = 1 To .Range("A1").CurrentRegion.Columns.CountIf .Cells(rowData, colData).Value Like "*" & sKey & "*" Thenbln = FalseExit ForEnd IfNext colData'记录不含查询内容的行If bln ThenIf rng Is Nothing ThenSet rng = .Rows(rowData)ElseSet rng = Union(rng, .Rows(rowData))End IfEnd IfNext rowData'隐藏不含查询内容的行If Not rng Is Nothing Thenrng.EntireRow.Hidden = TrueEnd IfEnd WithApplication.ScreenUpdating = TrueMe.TextBox1.SetFocusEnd SubPrivate Sub UserForm_Initialize()Sheet1.Rows.Hidden = FalseMe.CommandButton1.Default = TrueMe.Caption = "筛选"
End SubPrivate Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)Sheet1.Rows.Hidden = False
End Sub
步骤4 返回工作表界面,添加一个ActiveX按钮控件“显示筛选”,并为其添加单击事件代码如下,然后退出“设计模式”。
Option ExplicitPrivate Sub CommandButton1_Click()UserForm1.Show False
End Sub
步骤5 单击“显示筛选”按钮,在窗体的文本框中输入内容,按【Enter】键即可实现对数据的筛选。
DefauIt和CanceI按钮
本例需要实现在文本框中输入完成后才进行筛选的功能。若选用文本框的Change事件,则在输入的过程中就会触发查找,当数据量大或者所需输入的内容较多时,则会使运行的速度降低。
在窗体中,允许开发者设置一个Default按钮和Cancel按钮。Default按钮是默认的确认按钮,只需要在窗体中直接按键盘上的【Enter】键后就能够触发该按钮的Click事件。而Cancel按钮则是默认的取消按钮,可以通过按【Esc】键触发该按钮的Click事件。
当需要设置Default按钮或者Cancel按钮时,只需要将按钮的Default属性或者Cancel属性设置为True即可。在一个窗体中最多允许设置一个Default按钮和一个Cancel按钮。通常将确认输入的按钮设置为Default,而关闭或者取消按钮设置为Cancel,这样可以为用户提供许多便捷性。
本例设置一个按钮为Default,并调整窗体大小,将其隐藏(若更改Visible属性将其隐藏,则无法触发Click事件)。在按钮中添加筛选的代码,待筛选完成后使用SetFocus方法将光标重新定位至文本框。
提高单元格隐藏的速度
本例中,由于输入的关键字不同,可能会造成多个行隐藏。对VBA来说,逐个隐藏数据行的效率会比一次性隐藏多行低许多。一般情况下,可以将需要隐藏的数据行使用Union方法归并到一个Range类型的变量中,然后使用一条语句将该对象变量的Hidden属性设置为True,从而实现隐藏。
自制浮动工具栏
自Excel 2007起,微软取消了工具栏的设计,因而无法创建浮动工具栏。实质上,工具栏是一个特殊的窗体,开发者可以通过Excel VBA的窗体模拟一个工具栏。在窗体显示时,可以设置Show方法的Modal属性为False,既可显示窗体,又可操作数据表,从而模拟了浮动工具栏的效果。
动态显示与隐藏窗体
作为浮动工具栏,可以将其设置为动态显示或隐藏,其思路是通过Excel工作表的各个事件来控制窗体显示状态。如以下添加在Workbook对象中的代码展示了在某个工作簿中打开时,激活工作表Sheet1则显示窗体,而激活其他工作表时隐藏。以下代码演示了如何通过工作表激活事件来显示窗体,但当打开工作簿时显示Sheet1,则该事件无效。有兴趣的读者可以通过添加工作簿打开事件进一步完善该方案。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)If Sh Is Sheet1 ThenUserForm1.Show FalseEnd If
End SubPrivate Sub Workbook_SheetDeactivate(ByVal Sh As Object)If Sh Is Sheet1 ThenUnload UserForm1End If
End Sub
Excel 2010 VBA 入门 130 利用窗体创建实时筛选浮动工具栏相关推荐
- Excel 2010 VBA 入门 135 利用窗体制作登录界面
题 使用窗体制作登录界面,实现当打开Excel时,隐藏工作簿,当登录完成后显示工作簿. 码 登录机制是将用户输入的用户名和密码与正确的用户名和密码进行比较,若相等,则表示登录成功,反之登录失败.本例的 ...
- Excel 2010 VBA 入门 129 利用窗体向工作表中录入数据
目录 题 码 窗体控件与工作表的交互 窗体的事件 窗体中ControIs集合访问控件 控件的排列 使用控件数组进行赋值 题 如图所示,该表为某公司订单记录表,其中所有的列都是必填的,订单编号为自动生成 ...
- Excel 2010 VBA 入门 103 利用VBA批量插入图片
目录 示例 代码: Shapes.Shape和 ShapeRange Shapes对象插入图形的方法 Excel的坐标 图形大小的调整 获取图片的原始大小 将图片按比例缩放至单元格 图片批量插入的步骤 ...
- Excel 2010 VBA 入门 102 利用VBA批量发送邮件
目录 示例 代码 CDO组件 CDO. Message. Configuration对象 前期绑定与后期绑定 New关键字创建对象 添加邮件的附件 示例 如图所示,该表为某公司员工工资单.现需要将该表 ...
- Excel 2010 VBA 入门 104 利用VBA生成图表
目录 示例 代码 ChartObjects集合和ChartObject对象 数据系列(Series)对象 添加图表的其他方法 1.通过添加Chart对象添加图表 2.通过Shapes集合的AddCha ...
- Excel 2010 VBA 入门 132 利用复合框制作工作簿/表导航
目录 题 码 复合框(ComboBox)控件 利用复合框制作二级下拉列表 题 使用复合框制作一个工作表导航,以便实现工作簿及工作表的切换. 码 创建一个窗体,使用两个复合框制作二级下拉列表,其中一个作 ...
- Excel 2010 VBA 入门 034 创建图片批注
目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...
- Excel 2010 VBA 入门 064 按照关键字批量创建超链接
目录 示例 实现代码 Hyperlink对象 创建超链接 删除超链接及访问超链接 创建超链接打开指定的宏代码 示例 如图所示,该表为某公司资产负债表以及关于报表的说明.为了方便阅读,现希望能够用VBA ...
- Excel 2010 VBA 入门 119 创建对话框的帮助文档
目录 例 码 步骤1 步骤2 步骤3 步骤4 步骤5 步骤6 步骤7 步骤8 步骤9 步骤10 步骤11 步骤12 步骤13 步骤14 步骤15 CHM文件及HTML Help Workshop ...
最新文章
- FTP、HTTP断点续传和多线程的协议基础
- R语言生存分析COX回归分析实战:放疗是否会延长胰脏癌症患者的生存时间
- [2]-使用busybox-1.17.2制作文件系统
- C语言动态二维数组,结构体动态申请内存空间
- Java 8新特性——default方法(defender方法)介绍
- html标签的嵌套规则有哪些,html 标签的嵌套规则
- 每次新建Android项目都报样式找不到的错误?
- 笨办法学 Python · 续 练习 34:分析器
- 对于transform的新认识
- 运算符重载——左移运算符重载
- axure html尺寸,Axure 原型 | 教你使用自适应视图构建界面
- 学术会议html模板,学术会议poster模板
- 测试网速wifi软件,测网速工具 一键wifi测速
- python期权定价公式_美式期权BAW定价的Python3实现
- 一元线性回归(R语言)
- android调整图片大小,Android图像调整大小并保留EXIF数据(方向,旋转等)
- html另存word或excel,excel另存为word
- yamaha php mt8评测,诶哟这个盒子不错哟,NUC 8i5BEK简单开箱+评测(更新完毕)
- .git文件泄露的一次渗透darkhole2
- 智慧工地系统_成都智慧工地平台
热门文章
- android textview 底部,设置TextView居于屏幕底部的方法
- 瑞芯微RK3399嵌入式开发板Wifi 驱动 build in 方式
- JavaScript的prototype(原型)是什么?
- C++学习笔记-第1单元-C++简介
- 关于、主板BIOS中.调试与优化
- 智慧工厂数字化管理系统软件
- 计算机二级2020还考vb么,我大一,想问一下计算机二级考VB有用吗,听说VB快被取消拉,是不是考VB没考其他的价值大啊!...
- 从客户端中检测到有潜在危险的 request.form值[解决方法]
- 百度地图 卫星 二维
- OLED模块------原子例程到实际应用中的BUG