Office中国论坛/Access中国论坛
标题:
【新手入门】之二十三:关于宏的那些事(上)
[打印本页]
作者:
roych
时间:
2023-9-24 02:28
标题:
【新手入门】之二十三:关于宏的那些事(上)
据我所知,关于Access宏,普遍有两种看法:一种是认为很鸡肋,没必要学习,纯属浪费时间。它能做的VBA都能做;另一种是觉得有必要了解,在处理简单任务时,有时候它比VBA更便捷,减少调试时间。
我属于第二种,并且应该加上一条:不要钻研太深,因为复杂任务它确实难以胜任。举个栗子,比如,需要用到for循环处理数据时。
前两天,新坛友
sep1981
提及宏的一些问题。我忙里偷闲回复了一些。但总觉得这不是办法,所以还是决定发一个帖子,供更多遇到此类问题的版友学习和了解。他提到的关于组合框绑定列、宽度之类这些问题,我就不说了,这和宏没啥关系(有兴趣的可以点
这里
查看)。这里主要讲解下他后续提及的2个问题:
问题1:筛选数据不好使
(详见
班级信息_旧
窗体
)。
在我看来,这可能是因为在使用过程中,光标移动后更新数据的问题。
[attach]64658[/attach]
如图所示,顺序是这样的:
因为清空“中文名”控件数据,所以筛选值为空。
因为但“姓名”控件非空,数据源不存在空值,所以筛选不出数据。
移动到别的控件,但筛选操作并未清除,因此还是没有数据。
在别的控件里下拉筛选。
因为更新了筛选语句,所以这次操作有数据。
问题已经知晓了,但如何解决呢?答案是:不好解决。
较好的做法可能在”失去焦点事件“里取消筛选(详见
班级信息_新
窗体
)。
在原先是空值的控件中随意切换,问题不大。但再切换回来已经非空的控件时,你会发现一个问题:
[attach]64660[/attach]
光标确实是在控件里,但它只是假装在那里而已,像极了上班摸鱼的我们:人确实在公司,但心思不在公司。实际上被激活的控件是下方已选的那行记录。
这时候该怎么处理?直接按enter?没用的,它并不会执行“更改后事件”。
如果要执行“更改后事件”,你必须要"更改“,因此需要重新复制一个姓名进去,再按下enter。这时候才会执行。
对比下来,其实你发现两者区别不大。只是失去焦点后,是否清空筛选而已。
------------------------------
划重点,这一段要考的
---------------------
这也就是为什么一般会做一个按钮来执行复杂的查询,而不是通过多个组合框来完成。因为按钮不存在这么复杂的事件顺序,除了单击事件,几乎用不到别的。具体实例,请参考
刘小军常用窗体查询
。
------------------------------
划重点,这一段要考的
---------------------
问题2:如何处理模糊查询。
我们知道,宏里面是不存在Like、IIf之类关键词的。为此,我们需要转变一下思路:用InStr代替Like,用If…else…end if代替IIf,于是编写了这个宏:
[attach]64661[/attach]
这宏表示,当输入为空时,则显示全部记录。否则,将筛选包含下拉框文字内容的记录。InStr类似于Excel的Find,找到时返回正数,找不到则返回负数。这个宏将作用于子窗体记录。
具体请参考附件。
[attach]64662[/attach]
-----------写在最后的总结------------
1、用宏来筛选数据可能并非一个好的解决方案,尤其是复杂查询。一方面是交互不够友好,另一方面则可能涉及较为复杂的语句,一个条件时,一个if没问题,多个嵌套时呢?而且还需要注意应用在哪个控件上(请对比上面的链接:
刘小军常用窗体查询
)。
2、宏最佳实践应该是用于一些自动化数据处理,例如,整合多个操作查询或者调用不同的方法来处理数据(一二三上链接:
数据整理
)。
3、应用于复杂报表。由于报表没法执行按钮事件,因此需要交互时除了内置的一些格式化事件之外,几乎没有更好的办法来交互了。
这个待续吧。
其它关联链接如下(纯属凑字数):
【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【
新手入门
】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别
【新手入门】之九:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手入门】之十:书到用时方恨少——自定义菜单(Access 2003)的制作
【新手入门】之十一:浅谈ADO之序言
【新手入门】之十二:浅谈ADO之Connection
【新手入门】之十三:浅谈ADO之Conmmand(上)
【新手入门】之十四:浅谈ADO之Command(下)
【新手入门】之十五:浅谈ADO之Recordset(上)
【新手入门】之十六:浅谈ADO之Recordset(下)
【新手入门】之十七:浅谈列表框的使用
【新手入门】之十八:双击列表框修改数据
【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
【新手入门】之二十:“书与书签”——bookmark属性答疑
【新手入门】之二十一:记录集的“凌迟”——逐条导出记录集
【新手入门】之二十二:浅谈ADO之Conmmand番外篇——创建参数
----------------------------------------------------------------------------------------
【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统
作者:
worryd1
时间:
2023-9-25 22:03
谢谢分享,感觉用宏比较方便
作者:
人生好运
时间:
2023-11-30 17:20
谢谢分享
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3