Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

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

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

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

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


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

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

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

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

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

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

【新手入門(mén)】之九:從百錢(qián)百雞談起——淺談“規(guī)劃求解”兼答lingjiang問(wèn)
【新手入門(mén)】之十:書(shū)到用時(shí)方恨少——自定義菜單(Access 2003)的制作
【新手入門(mén)】之十一:淺談ADO之序言
【新手入門(mén)】之十二:淺談ADO之Connection
【新手入門(mén)】之十三:淺談ADO之Conmmand(上)
【新手入門(mén)】之十四:淺談ADO之Command(下)
【新手入門(mén)】之十五:淺談ADO之Recordset(上)
【新手入門(mén)】之十六:淺談ADO之Recordset(下)
【新手入門(mén)】之十七:淺談列表框的使用
【新手入門(mén)】之十八:雙擊列表框修改數(shù)據(jù)
【新手入門(mén)】之十九:從“書(shū)與女友恕不外借”談起——淺談“Bookmark”的使用
【新手入門(mén)】之二十:“書(shū)與書(shū)簽”——bookmark屬性答疑
【新手入門(mén)】之二十一:記錄集的“凌遲”——逐條導(dǎo)出記錄集
【新手入門(mén)】之二十二:淺談ADO之Conmmand番外篇——?jiǎng)?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ì)算
【新手進(jìn)階】之十一:“庖丁解牛”和“紀(jì)昌學(xué)射”——淺談表格式文本數(shù)據(jù)的導(dǎo)入
【新手進(jìn)階】之十二:從四腳騰空的奔馬談起——原來(lái)界面可以這樣設(shè)計(jì)
【新手進(jìn)階】之十三:Outlook風(fēng)格導(dǎo)航界面
【新手進(jìn)階】之十四:倉(cāng)庫(kù)管理系統(tǒng)





本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

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

謝謝分享
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 08:01 , Processed in 0.106056 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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