日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Excel VBA入門(六)過程和函數(shù)

 刮骨劍 2018-12-26

前面講過,VBA代碼有兩種組織形式,一種就是過程(前面的示例中都在使用),另一種就是函數(shù)。其實過程和函數(shù)有很多相同之處,除了使用的關(guān)鍵字不同之外,還有不同的是:

  • 函數(shù)有返回值,過程沒有
  • 函數(shù)可以在Excel表格中像一般的Excel函數(shù)那樣使用,但過程不可以
  • 過程可以指定給Excel表格中的按鈕或者圖片等對象,但是函數(shù)不可以
  • 函數(shù)只能在被調(diào)用時執(zhí)行,比如在過程中調(diào)用,或者在另一個函數(shù)中調(diào)用,或者在Excel表格中調(diào)用。但不能直接執(zhí)行,而過程是可以的

雖然可以把所有代碼都放在一個過程,或者一個函數(shù)里面,但是這樣會使代碼難以維護,特別是非常不便于其他人查看修改。而有時一些重復性的代碼,也應該把它們獨立出去,作為一個子過程或子函數(shù)來組織。使用子過程和子函數(shù)的目的,就是為了便于組織代碼、便于維護。

1. 過程 Sub

過程以Sub開頭,End Sub結(jié)束,過程中需要執(zhí)行的代碼放在中間。格式如下:

Sub 過程名()
    ' 需要在過程中執(zhí)行的代碼
End Sub

過程名后面的括號是必須的,過程可以帶參數(shù),就放置在括號里面,稍后會有說明。

過程示例:

Sub test()
    Debug.Print "Hello"
End Sub

2. 函數(shù) Function

與過程類似,函數(shù)的格式如下:

Function 函數(shù)名(參數(shù)1, 參數(shù)2, ...) As 數(shù)據(jù)類型
    ' 需要在函數(shù)中執(zhí)行的代碼
    函數(shù)名 = 函數(shù)執(zhí)行后的結(jié)果
End Function

函數(shù)名后面的括號是必須的,函數(shù)通常都帶有參數(shù),放置在括號里面。函數(shù)也可以不帶參數(shù),但這種情況下的函數(shù)通常沒什么意義。

括號后面的 As 數(shù)據(jù)類型 雖然并不是必須的,但是我強烈建議加上。因為函數(shù)通常都需要有返回值,這個數(shù)據(jù)類型就表示著返回值的數(shù)據(jù)類型。

函數(shù)體最后通常都帶有一條返回值語句,把函數(shù)執(zhí)行的結(jié)果賦值給函數(shù)名,就可以在調(diào)用這個函數(shù)的地方得到這個函數(shù)的執(zhí)行結(jié)果。這個返回結(jié)果的數(shù)據(jù)類型應該與函數(shù)名后面As的數(shù)據(jù)類型一致,否則可能會出錯。

函數(shù)示例:

Function my_sum(n1 as Integer, n2 as Integer) As Integer
    Dim s As Integer
    s = n1 + n2
    my_sum = s
End Function

上例中定義了一個名為my_sum的函數(shù),它接受兩個類型為Integer的參數(shù),并且返回值是Integer類型。在函數(shù)內(nèi)部計算了這兩個參數(shù)相加的和,并把這個和作為返回值賦給my_sum??梢酝ㄟ^調(diào)用這個函數(shù),并傳遞相應的參數(shù),獲得它的返回值。

定義函數(shù)后,就可以在VBA中的過程,或者其它函數(shù),或者在Excel表格中使用這個函數(shù)了。

在Excel表格中使用:

在VBA過程中使用:

再次強調(diào),函數(shù)是不能直接執(zhí)行的。上例中,如果試圖把鼠標光標放在my_sum函數(shù)中,再按F8,或者點擊工具欄中的執(zhí)行按鈕,都不會執(zhí)行這個函數(shù),而是會彈出一個運行宏的選擇對話框,而在這個對話框中,是沒有任何函數(shù)可供選擇的,只有過程:

3. 過程和函數(shù)的調(diào)用

前面說過,過程和函數(shù),都可以是被相互調(diào)用的。

3.1 過程的調(diào)用

格式1:

Call 過程名

格式2:

Call 過程名(參數(shù)1, 參數(shù)2, ...)

如果過程不帶參數(shù),那么可以使用第1種格式,過程名后面不需要括號

如果過程帶有參數(shù),則要按照參數(shù)的順序依次把參數(shù)寫到過程名后面的括號中。即使用第2種格式。

3.2 函數(shù)的調(diào)用

函數(shù)的調(diào)用在本章第2節(jié)中有示例。函數(shù)的調(diào)用通常會在調(diào)用時把其賦值給一個變量,以獲取函數(shù)返回值。

Sub test()
    Dim s As Integer
    s = my_sum(5, 5)
    Debug.Print s
End Sub
Function my_sum(n1 As Integer, n2 As Integer) As Integer
    Dim s As Integer
    s = n1 + n2
    my_sum = s
End Function

這里應該提出的是,函數(shù)應當要有返回值的,因為如果不需要返回值,那就應該直接使用過程而不是函數(shù)了。

4. 參數(shù)的使用

參數(shù)和使用對于過程和函數(shù)都是一樣的。所以本節(jié)的內(nèi)容對過程和函數(shù)都適用。

參數(shù)可分為可選參數(shù)和必選參數(shù)兩種。必選參數(shù)在調(diào)用(過程或函數(shù)時)必須加上,否則會報錯。可選參數(shù)則可寫可不寫。默認是必選參數(shù),可選參數(shù)在定義時用Optional關(guān)鍵字聲明,并且可選參數(shù)必須放在參數(shù)列表的最后面。

4.1 必選參數(shù)

必選參數(shù)在定義時放置在過程或函數(shù)名后面的括號中,格式為:

參數(shù)名 As 參數(shù)類型

如:

Sub sub_test(s As String)
    Debug.Print s
End Sub

在調(diào)用時,必須傳入?yún)?shù):

Sub test()
    Call sub_test("hello")
End Sub

4.2 可選參數(shù)

格式與必選參數(shù)類似,只是在參數(shù)名前面用Optional聲明參數(shù)是可選的。

Optional 參數(shù)名 As 參數(shù)類型

如:

Sub sub_test(Optional s As String)
    Debug.Print s
End Sub

在調(diào)用上述過程時,可以不傳入?yún)?shù),此時則不會輸出任何東西,也不會報錯,因為參數(shù)是可選的。如果傳入了參數(shù),則會輸出這個參數(shù)。

可選參數(shù)還可以設置默認值,即如果在調(diào)用時不顯式傳入這個參數(shù)的話,那么就使用定義時所使用的值。如下過程:

Sub sub_test(Optional s As String = "Hello, World")
    Debug.Print s
End Sub

帶參數(shù)調(diào)用

Sub test()
    Call sub_test("I am a boy")
End Sub

輸出:I am a boy

不帶參數(shù)調(diào)用

Sub test()
    Call sub_test
End Sub

輸出:Hello, World

4.3 同時使用可選參數(shù)與必選參數(shù)

此時可選參數(shù)必須放在最后

Sub sub_test(var As Integer, Optional s As String = "Hello, World")
    Debug.Print var
    Debug.Print s
End Sub

只傳入必選參數(shù)

Sub test()
    Call sub_test(50)
End Sub

輸出:

50

Hello, World

同時傳入可選參數(shù)與必選參數(shù)

Sub test()
   Call sub_test(50, "Hi, Meinv")
End Sub

輸出:

50

Hi, Meinv


本系列教程其它文章

Excel VBA 入門(零)
Excel VBA入門(一)數(shù)據(jù)類型
Excel VBA入門(二)數(shù)組和字典
Excel VBA入門(三) 流程控制1-條件選擇
Excel VBA入門(四)流程控制2-循環(huán)控制
Excel VBA入門(五)Excel對象操作
Excel VBA入門(六)過程和函數(shù)
Excel VBA入門(七)注釋、宏按鈕及錯誤處理
Excel VBA入門(八)單元格邊框
Excel VBA入門(九)操作工作薄

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多