設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 767|回復(fù): 2
打印 上一主題 下一主題

[宏/菜單/工具欄] 【新手入門】之二十三:關(guān)于宏的那些事(上)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2023-9-24 02:28:34 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
據(jù)我所知,關(guān)于Access宏,普遍有兩種看法:一種是認(rèn)為很雞肋,沒必要學(xué)習(xí),純屬浪費(fèi)時間。它能做的VBA都能做;另一種是覺得有必要了解,在處理簡單任務(wù)時,有時候它比VBA更便捷,減少調(diào)試時間。
我屬于第二種,并且應(yīng)該加上一條:不要鉆研太深,因?yàn)閺?fù)雜任務(wù)它確實(shí)難以勝任。舉個栗子,比如,需要用到for循環(huán)處理數(shù)據(jù)時。
前兩天,新壇友sep1981提及宏的一些問題。我忙里偷閑回復(fù)了一些。但總覺得這不是辦法,所以還是決定發(fā)一個帖子,供更多遇到此類問題的版友學(xué)習(xí)和了解。他提到的關(guān)于組合框綁定列、寬度之類這些問題,我就不說了,這和宏沒啥關(guān)系(有興趣的可以點(diǎn)這里查看)。這里主要講解下他后續(xù)提及的2個問題:
  • 問題1:篩選數(shù)據(jù)不好使(詳見班級信息_舊窗體)。

在我看來,這可能是因?yàn)樵谑褂眠^程中,光標(biāo)移動后更新數(shù)據(jù)的問題。

如圖所示,順序是這樣的:
  • 因?yàn)榍蹇铡爸形拿笨丶䲠?shù)據(jù),所以篩選值為空。
  • 因?yàn)榈靶彰笨丶强,?shù)據(jù)源不存在空值,所以篩選不出數(shù)據(jù)。
  • 移動到別的控件,但篩選操作并未清除,因此還是沒有數(shù)據(jù)。
  • 在別的控件里下拉篩選。
  • 因?yàn)楦铝撕Y選語句,所以這次操作有數(shù)據(jù)。


問題已經(jīng)知曉了,但如何解決呢?答案是:不好解決。
較好的做法可能在”失去焦點(diǎn)事件“里取消篩選(詳見班級信息_新窗體)。
在原先是空值的控件中隨意切換,問題不大。但再切換回來已經(jīng)非空的控件時,你會發(fā)現(xiàn)一個問題:

光標(biāo)確實(shí)是在控件里,但它只是假裝在那里而已,像極了上班摸魚的我們:人確實(shí)在公司,但心思不在公司。實(shí)際上被激活的控件是下方已選的那行記錄。
這時候該怎么處理?直接按enter?沒用的,它并不會執(zhí)行“更改后事件”。
如果要執(zhí)行“更改后事件”,你必須要"更改“,因此需要重新復(fù)制一個姓名進(jìn)去,再按下enter。這時候才會執(zhí)行。
對比下來,其實(shí)你發(fā)現(xiàn)兩者區(qū)別不大。只是失去焦點(diǎn)后,是否清空篩選而已。
------------------------------劃重點(diǎn),這一段要考的---------------------
這也就是為什么一般會做一個按鈕來執(zhí)行復(fù)雜的查詢,而不是通過多個組合框來完成。因?yàn)榘粹o不存在這么復(fù)雜的事件順序,除了單擊事件,幾乎用不到別的。具體實(shí)例,請參考劉小軍常用窗體查詢
------------------------------劃重點(diǎn),這一段要考的---------------------
  • 問題2:如何處理模糊查詢。

我們知道,宏里面是不存在Like、IIf之類關(guān)鍵詞的。為此,我們需要轉(zhuǎn)變一下思路:用InStr代替Like,用If…else…end if代替IIf,于是編寫了這個宏:

這宏表示,當(dāng)輸入為空時,則顯示全部記錄。否則,將篩選包含下拉框文字內(nèi)容的記錄。InStr類似于Excel的Find,找到時返回正數(shù),找不到則返回負(fù)數(shù)。這個宏將作用于子窗體記錄。
具體請參考附件。

-----------寫在最后的總結(jié)------------
1、用宏來篩選數(shù)據(jù)可能并非一個好的解決方案,尤其是復(fù)雜查詢。一方面是交互不夠友好,另一方面則可能涉及較為復(fù)雜的語句,一個條件時,一個if沒問題,多個嵌套時呢?而且還需要注意應(yīng)用在哪個控件上(請對比上面的鏈接:劉小軍常用窗體查詢)。
2、宏最佳實(shí)踐應(yīng)該是用于一些自動化數(shù)據(jù)處理,例如,整合多個操作查詢或者調(diào)用不同的方法來處理數(shù)據(jù)(一二三上鏈接:數(shù)據(jù)整理)。
3、應(yīng)用于復(fù)雜報表。由于報表沒法執(zhí)行按鈕事件,因此需要交互時除了內(nèi)置的一些格式化事件之外,幾乎沒有更好的辦法來交互了。
這個待續(xù)吧。

其它關(guān)聯(lián)鏈接如下(純屬湊字?jǐn)?shù)):
【新手入門】之一:If分支語句
【新手入門】之二:分支語句總結(jié)
【新手入門】之三:循環(huán)語句For
【新手入門】之四:循環(huán)語句Do和死循環(huán)
【新手入門】之五:公共變量與傳址過程、傳值過程
【新手入門】之六:“悲歡離合總無情”——淺談Split和Join
新手入門】之七:嵌套與并列——再談If流程問題
【新手入門】之八:“連就連”——淺談“&”和“+”連接符的區(qū)別

【新手入門】之九:從百錢百雞談起——淺談“規(guī)劃求解”兼答lingjiang問
【新手入門】之十:書到用時方恨少——自定義菜單(Access 2003)的制作
【新手入門】之十一:淺談ADO之序言
【新手入門】之十二:淺談ADO之Connection
【新手入門】之十三:淺談ADO之Conmmand(上)
【新手入門】之十四:淺談ADO之Command(下)
【新手入門】之十五:淺談ADO之Recordset(上)
【新手入門】之十六:淺談ADO之Recordset(下)
【新手入門】之十七:淺談列表框的使用
【新手入門】之十八:雙擊列表框修改數(shù)據(jù)
【新手入門】之十九:從“書與女友恕不外借”談起——淺談“Bookmark”的使用
【新手入門】之二十:“書與書簽”——bookmark屬性答疑
【新手入門】之二十一:記錄集的“凌遲”——逐條導(dǎo)出記錄集
【新手入門】之二十二:淺談ADO之Conmmand番外篇——創(chuàng)建參數(shù)
----------------------------------------------------------------------------------------
【新手進(jìn)階】之一:基礎(chǔ)算法(一)
【新手進(jìn)階】之二:基礎(chǔ)算法(二)
【新手進(jìn)階】之三:基礎(chǔ)算法(三)
【新手進(jìn)階】之四:基礎(chǔ)算法(四)
【新手進(jìn)階】之五:排序搜索(一)
【新手進(jìn)階】之六:排序搜索(二)
【新手進(jìn)階】之七:遞歸算法
【新手進(jìn)階】之八:冒泡排序
【新手進(jìn)階】之九:淺談不綁定數(shù)據(jù)源操作記錄
【新手進(jìn)階】之十:工作日的計算
【新手進(jìn)階】之十一:“庖丁解!焙汀凹o(jì)昌學(xué)射”——淺談表格式文本數(shù)據(jù)的導(dǎo)入
【新手進(jìn)階】之十二:從四腳騰空的奔馬談起——原來界面可以這樣設(shè)計
【新手進(jìn)階】之十三:Outlook風(fēng)格導(dǎo)航界面
【新手進(jìn)階】之十四:倉庫管理系統(tǒng)





本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2023-9-25 22:03:19 | 只看該作者
謝謝分享,感覺用宏比較方便
3#
發(fā)表于 2023-11-30 17:20:02 | 只看該作者

謝謝分享
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 08:25 , Processed in 0.098910 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表