在前面的章節(jié)中,你知道了過(guò)程是一組指令,它讓你在程序運(yùn)行的時(shí)候完成一些具體的任務(wù)。VBA有以下三種過(guò)程:
1、子程序過(guò)程(子程序)執(zhí)行一些有用的任務(wù)但是不返回任何值。它們以關(guān)鍵字Sub開(kāi)頭和關(guān)鍵字End Sub結(jié)束。子程序可以用宏錄制器錄制或者在VB編輯器窗口里直接編寫。你已經(jīng)學(xué)習(xí)了多種運(yùn)行這種過(guò)程的方法。
?
2、函數(shù)過(guò)程(函數(shù))執(zhí)行具體任務(wù)并返回值。它們以關(guān)鍵字Function開(kāi)頭和關(guān)鍵字EndFunction結(jié)束。在本章中,你將創(chuàng)建你的第一個(gè)函數(shù)過(guò)程。函數(shù)過(guò)程可以從子程序里執(zhí)行,也可以從工作表里訪問(wèn),就像Excel的內(nèi)置函數(shù)一樣。
3、屬性過(guò)程用于自定義對(duì)象。使用屬性過(guò)程你可以設(shè)置和獲取對(duì)象屬性的值,或者設(shè)置對(duì)另外一個(gè)對(duì)象的引用。你將在第十一章中學(xué)習(xí)如何創(chuàng)建自定義對(duì)象和使用屬性過(guò)程。
在本章中,你將學(xué)習(xí)如何創(chuàng)建和執(zhí)行自定義函數(shù),另外,你將發(fā)現(xiàn)變量如何用于傳遞數(shù)據(jù)給子程序和函數(shù)。在本章后面,你將對(duì)VBA中兩種最有用的函數(shù):MsgBox和InputBox進(jìn)行比較徹底的了解。
1. 打開(kāi)一個(gè)新Excel工作簿,并保存為Chap04.xls
2. 切換到VB編輯器窗口并且選擇VBAProject(Chap04.xls)
3. 在屬性窗口,將VBAProject改為MyFunctions
4. 在工程瀏覽器窗口選擇MyFunctions(Chap04.xls),然后選擇“插入”-“模塊”
5. 在屬性窗口將“模塊1”改為Sample1
6.在工程瀏覽器窗口,點(diǎn)擊Sample1并選擇“插入”-“過(guò)程”(譯者:需要激活右邊的代碼窗口)。添加過(guò)程對(duì)話框如圖4-1所示
圖4-1 你使用添加過(guò)程對(duì)話框時(shí),VB自動(dòng)創(chuàng)建你選擇的過(guò)程類型
7.在對(duì)話框里輸入下列設(shè)置:
名稱:SumItUp
類型:函數(shù)
范圍:公共的
8. 點(diǎn)擊確定退出添加過(guò)程對(duì)話框。VB輸入了一個(gè)空函數(shù)過(guò)程如下:
Public Function SumItUp()
End Function
第一句聲明函數(shù)過(guò)程名稱,關(guān)鍵字Public表面這個(gè)函數(shù)可以在所有模塊的所有過(guò)程里訪問(wèn)。關(guān)鍵字Public是可選的。注意,關(guān)鍵字Function后面是函數(shù)名稱(SumItUp)和一對(duì)空括號(hào)。在括號(hào)里你可以列上計(jì)算中需要的數(shù)據(jù)項(xiàng)目。每個(gè)函數(shù)過(guò)程都以End Function語(yǔ)句結(jié)束。
技巧:關(guān)于函數(shù)名稱
函數(shù)名稱應(yīng)該點(diǎn)明該函數(shù)的作用,并且必須和變量的命名規(guī)則一致。
技巧:設(shè)置VBA過(guò)程范圍
在前幾章你學(xué)習(xí)了變量的范圍決定它可以在哪些模塊和過(guò)程里使用,和變量一樣,VBA過(guò)程也有范圍。過(guò)程的范圍決定其它模塊里的過(guò)程是否可以調(diào)用該過(guò)程。所以的VBA過(guò)程默認(rèn)為公共的,這意味著它可以被任何模塊里的其它過(guò)程調(diào)用。因?yàn)檫^(guò)程默認(rèn)為公共的,所以如果你愿意你可以忽略關(guān)鍵字Public。但是,如果你將Public關(guān)鍵字換成關(guān)鍵字Private,那么你的過(guò)程只能被同一模塊里的其它過(guò)程調(diào)用,而不能被其它模塊里的過(guò)程調(diào)用。
將函數(shù)聲明修改為這樣:
Public Function SumItUp(m,n)
End Function
這個(gè)函數(shù)的目的是加和兩個(gè)數(shù)值。不要將實(shí)際值輸給函數(shù)。給該函數(shù)提供兩個(gè)自變量以確保該函數(shù)具有靈活性。這樣,你的自定義函數(shù)就能夠?qū)⒛闾峁┑娜魏蝺蓚€(gè)數(shù)值加和起來(lái)了。每個(gè)變量代表一個(gè)數(shù)值,你在運(yùn)行該函數(shù)時(shí)要給每個(gè)變量提供數(shù)值。
技巧:使用函數(shù)的理由
自定義VBA函數(shù)可以用于:
?
1、分析數(shù)據(jù)和進(jìn)行計(jì)算
2、修正數(shù)據(jù)和匯報(bào)信息
3、基于提供的或計(jì)算的數(shù)據(jù)采取具體行動(dòng)
10. 在Public Function和End Function之間輸入下述語(yǔ)句:
SumItUp = m + n
這條語(yǔ)句意思是將儲(chǔ)存于變量n上的數(shù)據(jù)加在儲(chǔ)存于變量m的數(shù)值上,并且將結(jié)果返回給函數(shù)SumItUp。在等號(hào)后面輸入該函數(shù)名稱,再就是括號(hào)和需要加和的數(shù)值。在上面的語(yǔ)句中,設(shè)置函數(shù)名稱等于m + n的和。完成的自定義函數(shù)過(guò)程如下:
Public Function SumItUp(m,n)
SumItUp = m + n
End Function
祝賀,你已經(jīng)創(chuàng)建了你的第一個(gè)函數(shù)!然而,函數(shù)過(guò)程并沒(méi)有什么用,除非你知道如何執(zhí)行它。下一個(gè)段落將給你示范如何使你的函數(shù)工作。
1. 切換到Excel窗口,并選擇任何一個(gè)單元格
2.點(diǎn)擊函數(shù)工具欄上的“插入函數(shù)(fx)”按鈕(譯者:或者選擇“插入”-“函數(shù)”),Excel彈出插入函數(shù)對(duì)話框,上面顯示了所選類別里所以函數(shù),按字母順序排列
3. 在類別下拉框里選擇“全部”或者“用戶定義”,然后滾動(dòng)函數(shù)名稱框,找到并選擇本章中創(chuàng)建的函數(shù)SumItUp。當(dāng)你選中這個(gè)函數(shù)名稱時(shí),在插入函數(shù)對(duì)話框的下部顯示了該函數(shù)的語(yǔ)法:
SumItUp(m,n)
技巧:私有函數(shù)用戶是看不到的
使用關(guān)鍵字Private聲明的函數(shù)不會(huì)出現(xiàn)在“插入函數(shù)”對(duì)話框上,私有函數(shù)不能用于公式里,它們只能從另一個(gè)VBA過(guò)程里調(diào)用。
技巧:快速訪問(wèn)自定義函數(shù)
一旦你創(chuàng)建了一個(gè)公共的VBA函數(shù),Excel就會(huì)將它加入到“插入函數(shù)”對(duì)話框的“用戶定義”的類別里。通過(guò)選擇這個(gè)類別,你可以快速地訪問(wèn)該自定義函數(shù)。
更多建議: