设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 489|回复: 2
打印 上一主题 下一主题

[宏/菜单/工具栏] 【新手入门】之二十三:关于宏的那些事(上)

[复制链接]
跳转到指定楼层
1#
发表于 2023-9-24 02:28:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
据我所知,关于Access宏,普遍有两种看法:一种是认为很鸡肋,没必要学习,纯属浪费时间。它能做的VBA都能做;另一种是觉得有必要了解,在处理简单任务时,有时候它比VBA更便捷,减少调试时间。
我属于第二种,并且应该加上一条:不要钻研太深,因为复杂任务它确实难以胜任。举个栗子,比如,需要用到for循环处理数据时。
前两天,新坛友sep1981提及宏的一些问题。我忙里偷闲回复了一些。但总觉得这不是办法,所以还是决定发一个帖子,供更多遇到此类问题的版友学习和了解。他提到的关于组合框绑定列、宽度之类这些问题,我就不说了,这和宏没啥关系(有兴趣的可以点这里查看)。这里主要讲解下他后续提及的2个问题:
  • 问题1:筛选数据不好使(详见班级信息_旧窗体)。

在我看来,这可能是因为在使用过程中,光标移动后更新数据的问题。

如图所示,顺序是这样的:
  • 因为清空“中文名”控件数据,所以筛选值为空。
  • 因为但“姓名”控件非空,数据源不存在空值,所以筛选不出数据。
  • 移动到别的控件,但筛选操作并未清除,因此还是没有数据。
  • 在别的控件里下拉筛选。
  • 因为更新了筛选语句,所以这次操作有数据。


问题已经知晓了,但如何解决呢?答案是:不好解决。
较好的做法可能在”失去焦点事件“里取消筛选(详见班级信息_新窗体)。
在原先是空值的控件中随意切换,问题不大。但再切换回来已经非空的控件时,你会发现一个问题:

光标确实是在控件里,但它只是假装在那里而已,像极了上班摸鱼的我们:人确实在公司,但心思不在公司。实际上被激活的控件是下方已选的那行记录。
这时候该怎么处理?直接按enter?没用的,它并不会执行“更改后事件”。
如果要执行“更改后事件”,你必须要"更改“,因此需要重新复制一个姓名进去,再按下enter。这时候才会执行。
对比下来,其实你发现两者区别不大。只是失去焦点后,是否清空筛选而已。
------------------------------划重点,这一段要考的---------------------
这也就是为什么一般会做一个按钮来执行复杂的查询,而不是通过多个组合框来完成。因为按钮不存在这么复杂的事件顺序,除了单击事件,几乎用不到别的。具体实例,请参考刘小军常用窗体查询
------------------------------划重点,这一段要考的---------------------
  • 问题2:如何处理模糊查询。

我们知道,宏里面是不存在Like、IIf之类关键词的。为此,我们需要转变一下思路:用InStr代替Like,用If…else…end if代替IIf,于是编写了这个宏:

这宏表示,当输入为空时,则显示全部记录。否则,将筛选包含下拉框文字内容的记录。InStr类似于Excel的Find,找到时返回正数,找不到则返回负数。这个宏将作用于子窗体记录。
具体请参考附件。

-----------写在最后的总结------------
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风格导航界面
【新手进阶】之十四:仓库管理系统





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2023-9-25 22:03:19 | 只看该作者
谢谢分享,感觉用宏比较方便
3#
发表于 2023-11-30 17:20:02 | 只看该作者

谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-28 11:46 , Processed in 0.094098 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表