宣告 Function 訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。的名稱、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。及程式碼。
語法
[
Public |
Private | Friend] [
Static]
Function name [
(arglist)] [
As type]
[
statements]
[
name = expression]
[
Exit Function]
[
statements]
[
name = expression]
End Function
Function 陳述式的語法具有下列幾個單元:
單元 | 描述 |
Public | 選擇性的。表示任何訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。中的所有其它程序都可呼叫 Function 程序。如果模組裏有 Option Private,那麼此程序就不能在訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。之外使用。 |
Private | 選擇性的。表示 Function 程序只能在宣告它之模組裏的程序所使用。 |
Friend | 選擇性的。只用於訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。中。指出 Function 程序在整個專案中都可見,但是對於該物件的一個執行個體的控制器則不會顯示。 |
Static | 選擇性引數。表示 Function 程序的區域訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。在呼叫之間會將值保留下來。Static 不會影響在 Function 之外所宣告的變數,即使它們在程序中使用到。 |
name | 必要的引數。Function 的名稱,遵循標準變數命名規格。 |
arglist | 選擇性引數。變數清單,表示呼叫 Function 程序時所傳送的引數。變數以逗號隔開。 |
type | 選擇性引數。 Function 程序傳回值的訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。,可以是 訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。 (目前尚未支援)、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。 (除了固定長度)、或訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。、訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。 或任何訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。。任何型態的訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。都無法被傳回,但含有陣列的 Variant 可以被傳回。 |
statements | 選擇性引數。任何 Function 程序所執行一群的陳述式。 |
expression | 選擇性引數。Function 的傳回值。 |
arglist 引數有下列語法和單元:
[
Optional] [
ByVal |
ByRef] [
ParamArray]
varname[
( )] [
As type] [=
defaultvalue]
單元 | 描述 |
Optional | 選擇性引數。表示引數不是必要的。如果使用,在 arglist 所有後來的引數也都為可選擇性的,且須以 Optional 關鍵字來宣告。若已使用 ParamArray 關鍵字來宣告,則引數不可再使用 Optional。 |
ByVal | 選擇性引數。表示以訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。的方式傳遞引數。 |
ByRef | 選擇性引數。表示以訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。的方式傳遞引數,Visual Basic 預設為 ByRef。 |
ParamArray | 選擇性引數。在 arglist 的最後一個引數上使用,表示此引數是一個 Variant 元素的 Optional 陣列。ParamArray 關鍵字允許您可使用任意個數的引數,但不可與 ByVal、ByRef或 Optional 共用。 |
varname | 必要的引數。代表引數的變數名稱,遵循標準變數命名規格。 |
type | 選擇性引數。傳給程序引數的資料型態,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、 Decimal (目前尚未支援)、Date、String (只限可變長度)、 Object 或 Variant。如果此參數不是 Optional,則可使用指定的訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。或使用者自訂型態。 |
defaultvalue | 選擇性引數。任何訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。或常數運算式,只適用在 Optional 的參數。如果型態為 Object,其預設值為 Nothing。 |
請注意
若無明確地指定 Public、Private或 Function 程序,則預設為公用的。如果沒有使用 Static,區域變數的值在每次呼叫之間不會保留下來。
注意 Function 程序可遞迴,也就是它們可以呼叫自己。然而,遞迴可能會造成堆疊溢位。Static 關鍵字也通常不使用在遞迴的 Function 程序上。
所有的可執行程式碼都必須在程序中。不可以在 Function、Sub 或 Property 程序裏定義其它的 Function 程序。
Exit Function 陳述式會使 Function 程序立即停止。程式會從呼叫該 Function 程序的下一行陳述式繼續執行。Exit Function 陳述式可在 Function 程序任何位置出現,且不限次數。
如同 Sub 程序,Function 程序是可接受引數、執行一串陳述式並且改變其引數值的獨立程序。然而,與 Sub 程序不同的是,當您想運用函數的傳回值時,Function 程序可以放在訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。的右方,就如同使用內建函數一樣,例如 Sqr、 Cos 或 Chr。
運算式中只要使用函數名稱接著以括號括起來的引數列,就可以呼叫 Function 程序。請參考 Call 陳述式以得知關於如何呼叫 Function 程序的特定資訊。
若要從函數中傳回值,須指定該值給函數名稱。這種指定式可出現於程序中的任何位置,且不限次數。如果沒有指定值給 name,則程序會傳回預設值:數值函數傳回 0,字串函數傳回零長度字串 (""),Variant 函數傳回 訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。。若傳回型態為物件所引用,且 Function 裏沒有指定物件引用給 name (使用 Set),則函數會傳回 Nothing。
下列範例表示如何指定傳回值給一個名稱叫作 BinarySearch 的函數。在此範例中,指定 False 給名稱以表示有些值找不到。
Function BinarySearch(. . .) As Boolean
. . . ' 找不到欲搜尋之值,傳回 False If lower > upper Then BinarySearch = False Exit Function End If
. . .End Function
在 Function 程序中使用的變數有兩類:那些在程序中明確宣告的,以及不是此類的。在程序中明確地宣告的變數 (使用 Dim 或同類字),必為區域變數。程序中有使用到,但未在程序中宣告的變數也是區域的,除非此變數已在程序外更高層次中被宣告。
注意 程序可使用不是在該程序中宣告過的變數,但是若在訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。定義相同的名稱,就會發生名稱上的衝突。如果程序裏引用了未宣告的變數,而此變數的名稱和其它程序、常數或變數的名稱相同,則會認定程序是引用模組層次的名稱。所以,請明確地宣告變數以避免此種衝突。可使用 Option Explicit 陳述式來強迫變數的宣告。
注意 Visual Basic 可能為了內部的效率而重新排列算術運算式。若 Function 程序會改變同一運算式中的變數值,請避免在此狀況下使用。
Function 陳述式範例
本範例使用 Function 陳述式來宣告一個函數的名稱、引數及函數的程式碼。在範例的最後一段中,使用到被初始化的 Optional 引數。
' 下面自訂函數傳回其引數值的平方根。Function CalculateSquareRoot(NumberArg As Double) As Double If NumberArg < 0 Then ' 檢查引數值。 Exit Function ' 如果引數值小於 0,結束函數。 Else CalculateSquareRoot = Sqr(NumberArg) ' 將平方根傳回。 End IfEnd Function利用關鍵字
ParamArray 可以讓函數接受不固定數目的引數。下面範例中,FirstArg 是以傳值的方式傳入。
Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs()) Dim ReturnValue ' 如果此函數以如下方式呼叫: ReturnValue = CalcSum(4, 3 ,2 ,1) ' 區域變數值將會如下:FirstArg = 4,OtherArgs(1) = 3,OtherArgs(2) = 2,依此類推 (假設陣列索引值的預設下限為 1)。 ...
Optional 引數可以有預設值,也可以是
Variant 以外的型態。
' 如果函數的引數以如下方式定義:Function MyFunc(MyStr As String, Optional MyArg1 As _ Integer = 5, Optional MyArg2 = "Heolly") Dim RetVal ' 函數可以下列方式呼叫: RetVal = MyFunc("Hello", 2, "World") ' 三個引數都傳入。 RetVal = MyFunc("Test", , 5) ' 第二個引數省略。 ' 第一和第三個引數使用 [指名引數] 方式傳入。 RetVal = MyFunc(MyStr:="Hello ", MyArg1:=7) ...