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

 找回密碼
 注冊(cè)

QQ登錄

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

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

[模塊/函數(shù)] 【原創(chuàng) / 文章】VBA代碼調(diào)試圖文教程(二)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2006-5-21 00:01:00 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

二、斷點(diǎn)和單步:
  斷點(diǎn)——顧名思義就是中斷的地方,正常情況下,我們的代碼是連續(xù)執(zhí)行的,只有在遇到異常情況,發(fā)生了某些錯(cuò)誤,才會(huì)中斷跳出,而斷點(diǎn)是用戶手工設(shè)定的程序強(qiáng)制中斷點(diǎn),無(wú)論程序運(yùn)行正常與否,都將在斷點(diǎn)停止執(zhí)行。
  斷點(diǎn)的使用便于用戶在有疑點(diǎn)的代碼行之前中斷代碼,然后使用單步來(lái)逐行檢查自己的代碼是否與自己的設(shè)計(jì)目標(biāo)一致,在那些語(yǔ)法沒(méi)有問(wèn)題,執(zhí)行沒(méi)有任何錯(cuò)誤,但是結(jié)果與我們預(yù)期不符的代碼中,斷點(diǎn)尤其重要。
  在下圖中,我們可以看到代碼中有一個(gè)褐色的橫條,這個(gè)橫條就是我們?cè)O(shè)置的斷點(diǎn),程序?qū)⒃谶\(yùn)行到這行代碼之前中斷(而不是運(yùn)行完這行代碼之后,這一點(diǎn)尤其重要),設(shè)置或取消的這個(gè)斷點(diǎn)的方法有兩種,一種是光標(biāo)移動(dòng)到這行代碼上,然后選擇『調(diào)試』菜單中的『切換斷點(diǎn)』功能(熱鍵F9),更簡(jiǎn)單的方法就是在橫條前那個(gè)原點(diǎn)的位置用鼠標(biāo)單擊。



  OK,下面讓我們來(lái)看看斷點(diǎn)的效果,我們打開(kāi)『企業(yè)資料』窗體,把當(dāng)前窗體上的數(shù)據(jù)修改一下,然后點(diǎn)擊『保存』按鈕來(lái)觸發(fā)這段代碼。這時(shí)如下圖所示,VBAIDE被自動(dòng)彈出了,而且光標(biāo)停在了我們?cè)O(shè)置的斷點(diǎn)上。這個(gè)時(shí)候,代碼處于被掛起狀態(tài),我們可以進(jìn)行各種其他的調(diào)試操作,例如查看掛起狀態(tài)下程序的狀態(tài),各個(gè)變量的當(dāng)前值等等,甚至我們還可以通過(guò)在立即窗口中輸入執(zhí)行代碼來(lái)改變代碼運(yùn)行的狀態(tài)等等。



  處于掛起狀態(tài)下的代碼,我們只需要將鼠標(biāo)移動(dòng)到變量上,就能查看他的當(dāng)前值,我們將鼠標(biāo)移動(dòng)到STemp上,即可如上圖所示,看到Stemp的當(dāng)前值為:"INSERT INTO 企業(yè)",這一方便的功能有助于我們?cè)诖a執(zhí)行過(guò)程中,逐步檢查代碼是否在按照自己的預(yù)期來(lái)工作。
  讓我們來(lái)嘗試一下改變Stemp,我們?cè)诹⒓创翱谥休斎氪a如下圖后按回車執(zhí)行。然后我們?cè)賹⑹髽?biāo)移動(dòng)到代碼中Stemp變量上,你發(fā)現(xiàn)了什么?當(dāng)然,我們所做的這個(gè)改動(dòng),僅僅影響當(dāng)前正在運(yùn)行的代碼內(nèi)存狀態(tài),一旦代碼執(zhí)行結(jié)束或者中斷,我們下載再運(yùn)行的時(shí)候,就不會(huì)繼續(xù)受到影響了。



  現(xiàn)在我們已經(jīng)將代碼的執(zhí)行中斷了,接下來(lái)我們就要讓他按照我們的需要一步步地慢慢執(zhí)行,我們可以在『調(diào)試』菜單中選擇『逐語(yǔ)句』,當(dāng)然更簡(jiǎn)單的方法就是按F8,這時(shí)候,我們可以看到黃色標(biāo)記會(huì)隨著我們按F8,一行一行往下移動(dòng),這個(gè)時(shí)候,系統(tǒng)也正在逐行執(zhí)行我們的代碼。如下圖所示,當(dāng)我們執(zhí)行了下一行代碼后,我們?cè)俨榭碨temp的值,發(fā)現(xiàn)它已經(jīng)被改變了。同時(shí),我們剛才在立即窗口中對(duì)于變量狀態(tài)的“篡改”也對(duì)程序的執(zhí)行產(chǎn)生了影響。



  如絕大多數(shù)語(yǔ)言的開(kāi)發(fā)環(huán)境一樣,VBAIDE也提供多種的單步執(zhí)行方式,包括:逐語(yǔ)句/逐過(guò)程/跳出/運(yùn)行到光標(biāo)處,其中逐語(yǔ)句我們已經(jīng)用過(guò),對(duì)于代碼中的函數(shù)調(diào)用等,逐語(yǔ)句將會(huì)嚴(yán)格遵循系統(tǒng)的執(zhí)行順序,一行代碼都不會(huì)拉下,而逐過(guò)程則僅對(duì)于當(dāng)前的代碼塊是逐語(yǔ)句的,對(duì)于當(dāng)前代碼塊中的調(diào)用,則視作一行代碼一次執(zhí)行完成,這一功能對(duì)于那些代碼中包含我們已經(jīng)確信沒(méi)有問(wèn)題的子程序的,是非常有用的。而跳出則是將當(dāng)前代碼塊執(zhí)行完,回到調(diào)用他的地方去。
  除了以上四個(gè)單步調(diào)試功能外,還有一個(gè)最重要的功能就是『運(yùn)行』菜單中的『繼續(xù)』選項(xiàng),熱鍵F5,這一功能則是在我們調(diào)試完畢后,解除代碼的掛起狀態(tài),使代碼從掛起處繼續(xù)運(yùn)行。
  下面讓我們來(lái)練習(xí)一下,在我們的例子中,修改功能并不能正常使用,讓我們用剛學(xué)到的方法來(lái)分析一下是什么原因。首先,我們?cè)谛薷陌粹o的代碼入口設(shè)置斷點(diǎn)如下:



  然后我們選擇一條記錄,將法人代碼修改為:“00000000”,然后一步一步按F8往下執(zhí)行,代碼執(zhí)行很正常,先是作數(shù)據(jù)合法性判斷,然后尋找記錄,找到后進(jìn)行修改。當(dāng)我們執(zhí)行到如下圖所示行時(shí),問(wèn)題出現(xiàn)了,這行代碼明顯就是執(zhí)行修改法人代碼的功能,然而我們用鼠標(biāo)選中等號(hào)前后的部分,分別查看其值的時(shí)候,我們發(fā)現(xiàn)居然是完全一樣的,照理等式右邊的值應(yīng)該是“00000000”,而我們發(fā)現(xiàn)現(xiàn)在都是修改前的值,我們所做的修改根本沒(méi)有被記錄。再仔細(xì)分析代碼,我們發(fā)現(xiàn),“Me![企業(yè)資料 子窗體]![法人代碼]”實(shí)際上就是取子窗體中的法人代碼,而子窗體中的數(shù)據(jù)本來(lái)就是沒(méi)有被修改過(guò)的,我們的代碼錯(cuò)誤引用了窗體,導(dǎo)致程序完全忽略了主窗體中被修改的變量。



  我們將代碼修正為“Rs("法人代碼") = 法人代碼.Value”,按F5繼續(xù)執(zhí)行,修改完成,其他的字段中也存在同樣的問(wèn)題,逐一修正后修改功能正常。












[此貼子已經(jīng)被作者于2006-5-20 1

本帖子中包含更多資源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2006-5-21 00:13:00 | 只看該作者
很實(shí)用的調(diào)試方法,通俗易懂,圖文并茂,值得初學(xué)者一看
3#
發(fā)表于 2006-5-21 00:23:00 | 只看該作者
很實(shí)用的教程
4#
發(fā)表于 2006-6-30 00:13:00 | 只看該作者
沒(méi)有C++的調(diào)試程序好用
5#
發(fā)表于 2006-7-24 08:20:00 | 只看該作者
好清晰
6#
發(fā)表于 2008-6-5 15:26:32 | 只看該作者
謝謝您無(wú)私的奉獻(xiàn)!收藏了[:33]
7#
發(fā)表于 2009-10-19 21:12:56 | 只看該作者
樓主的熱心和水平都是一流,佩服。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

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

GMT+8, 2024-10-23 08:29 , Processed in 0.153911 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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