VBA函數(shù)過程

2018-11-16 14:27 更新

在前面的章節(jié)中,你知道了過程是一組指令,它讓你在程序運行的時候完成一些具體的任務。VBA有以下三種過程:

1、子程序過程(子程序)執(zhí)行一些有用的任務但是不返回任何值。它們以關鍵字Sub開頭和關鍵字End Sub結束。子程序可以用宏錄制器錄制或者在VB編輯器窗口里直接編寫。你已經學習了多種運行這種過程的方法。
?
2、函數(shù)過程(函數(shù))執(zhí)行具體任務并返回值。它們以關鍵字Function開頭和關鍵字EndFunction結束。在本章中,你將創(chuàng)建你的第一個函數(shù)過程。函數(shù)過程可以從子程序里執(zhí)行,也可以從工作表里訪問,就像Excel的內置函數(shù)一樣。

3、屬性過程用于自定義對象。使用屬性過程你可以設置和獲取對象屬性的值,或者設置對另外一個對象的引用。你將在第十一章中學習如何創(chuàng)建自定義對象和使用屬性過程。


在本章中,你將學習如何創(chuàng)建和執(zhí)行自定義函數(shù),另外,你將發(fā)現(xiàn)變量如何用于傳遞數(shù)據給子程序和函數(shù)。在本章后面,你將對VBA中兩種最有用的函數(shù):MsgBox和InputBox進行比較徹底的了解。


關于函數(shù)過程

使用Excel幾百種內置函數(shù),你可以進行非常寬廣的自動計算,然而,你總有要做個自定義計算的時候。使用VBA編程,你可以通過創(chuàng)建函數(shù)過程快速的完成這個特殊需求,你可以創(chuàng)建任何Excel沒有提供的函數(shù)。


創(chuàng)建函數(shù)過程

象Excel函數(shù)一樣,函數(shù)過程進行計算并返回數(shù)值。學習函數(shù)的最好方法就是自己創(chuàng)建一個。因此,我們開始吧。設置完一個新的VBA工程后,你將創(chuàng)建一個函數(shù)過程來加和兩個數(shù)值。


1.  打開一個新Excel工作簿,并保存為Chap04.xls
2.  切換到VB編輯器窗口并且選擇VBAProject(Chap04.xls)
3.  在屬性窗口,將VBAProject改為MyFunctions
4.  在工程瀏覽器窗口選擇MyFunctions(Chap04.xls),然后選擇“插入”-“模塊”
5.  在屬性窗口將“模塊1”改為Sample1

6.在工程瀏覽器窗口,點擊Sample1并選擇“插入”-“過程”(譯者:需要激活右邊的代碼窗口)。添加過程對話框如圖4-1所示


過程類型

圖4-1 你使用添加過程對話框時,VB自動創(chuàng)建你選擇的過程類型

7.在對話框里輸入下列設置:

名稱:SumItUp
類型:函數(shù)
范圍:公共的


8.  點擊確定退出添加過程對話框。VB輸入了一個空函數(shù)過程如下:

Public Function SumItUp()
End Function


第一句聲明函數(shù)過程名稱,關鍵字Public表面這個函數(shù)可以在所有模塊的所有過程里訪問。關鍵字Public是可選的。注意,關鍵字Function后面是函數(shù)名稱(SumItUp)和一對空括號。在括號里你可以列上計算中需要的數(shù)據項目。每個函數(shù)過程都以End Function語句結束。


技巧:關于函數(shù)名稱
函數(shù)名稱應該點明該函數(shù)的作用,并且必須和變量的命名規(guī)則一致。

技巧:設置VBA過程范圍
在前幾章你學習了變量的范圍決定它可以在哪些模塊和過程里使用,和變量一樣,VBA過程也有范圍。過程的范圍決定其它模塊里的過程是否可以調用該過程。所以的VBA過程默認為公共的,這意味著它可以被任何模塊里的其它過程調用。因為過程默認為公共的,所以如果你愿意你可以忽略關鍵字Public。但是,如果你將Public關鍵字換成關鍵字Private,那么你的過程只能被同一模塊里的其它過程調用,而不能被其它模塊里的過程調用。

將函數(shù)聲明修改為這樣:


Public Function SumItUp(m,n)
End Function


這個函數(shù)的目的是加和兩個數(shù)值。不要將實際值輸給函數(shù)。給該函數(shù)提供兩個自變量以確保該函數(shù)具有靈活性。這樣,你的自定義函數(shù)就能夠將你提供的任何兩個數(shù)值加和起來了。每個變量代表一個數(shù)值,你在運行該函數(shù)時要給每個變量提供數(shù)值。


技巧:使用函數(shù)的理由
自定義VBA函數(shù)可以用于:
?  

1、分析數(shù)據和進行計算

2、修正數(shù)據和匯報信息

3、基于提供的或計算的數(shù)據采取具體行動


10. 在Public Function和End Function之間輸入下述語句:


SumItUp = m + n


這條語句意思是將儲存于變量n上的數(shù)據加在儲存于變量m的數(shù)值上,并且將結果返回給函數(shù)SumItUp。在等號后面輸入該函數(shù)名稱,再就是括號和需要加和的數(shù)值。在上面的語句中,設置函數(shù)名稱等于m + n的和。完成的自定義函數(shù)過程如下:


Public Function SumItUp(m,n)
            SumItUp = m + n
End Function


祝賀,你已經創(chuàng)建了你的第一個函數(shù)!然而,函數(shù)過程并沒有什么用,除非你知道如何執(zhí)行它。下一個段落將給你示范如何使你的函數(shù)工作。

執(zhí)行函數(shù)過程

在第一章里,你學習了很多中方法來運行子程序。和子程序不同,函數(shù)過程只能使用兩種方法來執(zhí)行。你可以用于工作表的公式里面,或者從另外一個過程里調用它。你在VBA里創(chuàng)建的函數(shù)過程,不能通過在Excel窗口選擇“工具”-“宏”-“運行宏”訪問;它們也不能在代碼里面通過按F5鍵來運行。接下來的部分里,你將學習到執(zhí)行函數(shù)的專門技術。


從工作表里運行函數(shù)過程

自定義函數(shù)過程和內置函數(shù)一樣,如果你不知道確切的函數(shù)名稱或者它的自變量,那么你可以使用“插入函數(shù)”對話框來幫助你在工作表里輸入需要的函數(shù)。


1.  切換到Excel窗口,并選擇任何一個單元格


2.
點擊函數(shù)工具欄上的“插入函數(shù)(fx)”按鈕(譯者:或者選擇“插入”-“函數(shù)”),Excel彈出插入函數(shù)對話框,上面顯示了所選類別里所以函數(shù),按字母順序排列


3.  在類別下拉框里選擇“全部”或者“用戶定義”,然后滾動函數(shù)名稱框,找到并選擇本章中創(chuàng)建的函數(shù)SumItUp。當你選中這個函數(shù)名稱時,在插入函數(shù)對話框的下部顯示了該函數(shù)的語法:


SumItUp(m,n)


技巧:私有函數(shù)用戶是看不到的
使用關鍵字Private聲明的函數(shù)不會出現(xiàn)在“插入函數(shù)”對話框上,私有函數(shù)不能用于公式里,它們只能從另一個VBA過程里調用。


技巧:快速訪問自定義函數(shù)
一旦你創(chuàng)建了一個公共的VBA函數(shù),Excel就會將它加入到“插入函數(shù)”對話框的“用戶定義”的類別里。通過選擇這個類別,你可以快速地訪問該自定義函數(shù)。


插入函數(shù)
圖4-2 VBA自定義函數(shù)出現(xiàn)在Excel內置函數(shù)同一清單上


4.點擊確定,開始寫公式?!昂瘮?shù)參數(shù)”對話框出現(xiàn),如下圖所示。對話框顯示了函數(shù)名稱和每個參數(shù):m和n

函數(shù)參數(shù)
圖4-3 公式的調色板功能有助于輸入任何工作表函數(shù),不論是內置或VBA編程的自定義函數(shù)

5.  如圖4-3所示輸入自變量數(shù)值,或者你任意輸入數(shù)值。當你輸入數(shù)值在參數(shù)文本框時,Excel顯示你輸入的數(shù)和當前的函數(shù)結果。因為兩個參數(shù)(m和n)都是必須的,所以,如果你忽略了其中的某個時,函數(shù)會返回錯誤。

6.  點擊確定退出函數(shù)參數(shù)對話框,Excel輸入函數(shù)SumItUp在所選的單元格里,并且顯示它的結果。要編輯這個公式的話,選擇該顯示公式結果的單元格,并且點擊“插入函數(shù)”按鈕,選擇函數(shù)并點擊確定以訪問函數(shù)參數(shù)對話框。在函數(shù)參數(shù)m和n上輸入不同的數(shù)值,并點擊確定。也可以直接在該單元格上雙擊,修改函數(shù)參數(shù)值。

技巧:確保你的自定義函數(shù)可用
只有在你儲存該自定義函數(shù)的工作簿開啟的時候,你的自定義VBA函數(shù)才可用,如果你關閉該工作簿,該函數(shù)便不再可用。要確保你的自定義函數(shù)每次在你使用Excel時都能用到,你可以做下述事情之一:

1、保存你的函數(shù)在個人宏工作簿
?
2、將含有你的自定義函數(shù)的工作簿保存在XLStart文件夾里

3、創(chuàng)建引用到含有該自定義函數(shù)的工作簿(請參見第二章,如何創(chuàng)建對另一個工程的引用)

從另外一個VBA過程里運行函數(shù)過程

正如前面提到的,你不能在VB窗口將光標放在代碼里并且按F5來運行函數(shù),也不能通過選擇“運行”-“運行宏”來運行函數(shù)過程。要運行函數(shù),你必須從另外一個過程里調用該函數(shù)。要執(zhí)行自定義函數(shù),編寫一個VBA子程序并且在需要的時候調用該函數(shù)。下面的過程調用函數(shù)SumItUp并且將計算結果輸出在立即窗口:

Sub RunSumItUp()
             Dim m As Single, n As Single
             m = 370000
             n = 3459.77
             Debug.Print SumItUp(m,n)
             MsgBox "Open the Immediate window to see the result."
End Sub
?  
1、上面的子程序使用Dim語句聲明變量m和n,它們用來給函數(shù)提供數(shù)據

2、接下來兩行語句給變量賦值
?  
3、再下來,VB調用函數(shù)SumItUp并且將儲存于變量m和n的數(shù)值傳遞給它。當函數(shù)過程里SumItUp=m + n語句執(zhí)行完后,VB返回到子過程RunSumItUp里面,并且使用Debug.Print語句將函數(shù)的結果輸出在立即窗口
?  
4、MsgBox函數(shù)通知用戶在哪里查看結果

依照下述步驟來試驗上面的例子:

1.  在輸入函數(shù)SumItUp的同一個模塊里面輸入過程RunSumItUp

2.  將光標放在該過程的任意地方,按下F5

技巧: 函數(shù)的快速測試
你編寫自定義函數(shù)后,你可以在立即窗口快速的測試它。打開立即窗口,輸入一個問號(?)在函數(shù)名稱前,可以顯示該函數(shù)的計算結果。記住,要在括號里輸入函數(shù)的參數(shù)值。 例如,輸入:

? SumItUp(54, 367.24)

然后回車。你的函數(shù)使用參數(shù)m和n傳遞的數(shù)值進行計算,函數(shù)的結果顯示在下一行:

421.24
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號