共用方式為


Function 陳述式

宣告形成 Function 程式主體的名稱、自變數和程序代碼。

語法

[公用 | 私人 | Friend][ Static ] 式名稱 [ ( arglist ) ] [ Astype ]
[ statements ]
[ name=運算式 ]
[ Exit 函式 ]
[ statements ]
[ name=運算式 ]
End 函式

Function 語句語法具有下列部分:

部分 描述
Public 選用。 表示函 程式可供所有模組中的所有其他程式存 。 如果用於包含 Option Private 的模組中,則無法在專案外部使用 程式。
Private 選用。 表示函 程式只能供宣告函式之模組中的其他程式存取。
Friend 選用。 僅用於 類模組。 表示函 程式在整個項目中可見,但對象實例的控制器看不到。
Static 選用。 表示 函式 程式的局部 變數 會在呼叫之間保留。 靜態屬性不會影響函式外部宣告的變數,即使這些變數用於程式中也一般。
name 此為必要動作。 函 式的名稱;遵循標準變數命名慣例。
arglist 選用。 變數清單,代表呼叫函 式程式時 傳遞至函式程式的自變數。 多個變數會以逗號分隔。
type 選用。 式程式所傳回值的數據類型;可能是 ByteBooleanIntegerLongCurrencySingleDoubleDecimal (目前不支援) 、日期字符串 (,但固定長度) 、ObjectVariant 或任何使用者定義類型除外。
陳述式 選用。 要在 Function 程式內 執行的任何語句群組。
expression 選用。 函 式的傳回值。

arglist 引數具有下列語法和部分︰

[ 選擇性 ][ ByVal | ByRef ][ ParamArray ] varname [ ( ) ] [ Astype ] [ =defaultvalue ]

部分 描述
Optional 選用。 表示引數不是必要的。 如果使用, arglist 中的所有後續自變數也必須是選擇性自變數,並使用 Optional 關鍵詞來宣告。 如果已使用 ParamArray ,則不能在任何引數中使用 Optional
ByVal 選用。 表示引數以傳值方式傳遞。
ByRef 選用。 表示引數以傳參考方式傳遞。 ByRef 是 VBA 中的預設值,與 Visual Basic .NET 不同。
ParamArray 選用。 僅作為arglist中的最後一個自變數,以指出最終自變數是 Variant 元素的選擇性陣列。 ParamArray 關鍵字可讓您提供引數的任意數。 它不能與 ByValByRefOptional 搭配使用。
varname 此為必要動作。 代表自變數的變數名稱;遵循標準變數命名慣例。
type 選用。 傳遞至程式之自變數的數據類型;可能是目前不支援的 ByteBooleanIntegerLongCurrencySingleDoubleDecimal () DateString (變數長度僅) 、 ObjectVariant 或特定 物件類型。 如果參數不是 選擇性,也可以指定使用者定義型別。
defaultvalue 選用。 任何 常數 或常數表達式。 僅適用於 選擇性 參數。 如果類型是 Object,則明確預設值只能是 Nothing

註解

如果未使用 PublicPrivateFriend 明確 指定,則 函式程式預設為公用。

如果未使用 Static ,則不會在呼叫之間保留局部變數的值。

Friend 關鍵詞只能用於類模組。 不過, Friend 程式可由專案任何模組中的程式存取。 Friend 程式不會出現在其父類別的類型庫中,也不會晚期綁定 Friend 程式。

式程式可以是遞歸的;也就是說,他們可以呼叫自己來執行指定的工作。 不過,遞歸可能會導致堆疊溢出。 Static 關鍵詞通常不會與遞歸函式程式搭配使用。

所有可執行程式代碼都必須在程式中。 您無法在另一個Function、Sub 或 Property 程式內定義函程式。

Exit Function 語句會導致立即結束函式程式。 程序執行會在呼叫 Function 程式的 語句後面繼續執行 語句。 任何數目的 Exit Function 語句都可以出現在 Function 程式中 的任何位置。

式程式就像Sub 程式一樣,是可以接受自變數、執行一系列語句,以及變更其自變數值的個別程式。 不過,不同於 Sub 程式,當您想要使用函式所傳回的值時,可以使用表達式右側的 Function 程式,就像使用任何內部函數一樣,例如 SqrCosChr

您可以在表達式中使用函式名稱,後面接著括弧中的自變數清單,來呼叫 Function 程式。 如需如何呼叫函式程式的特定資訊,請參閱 Call 語句。

若要從函式傳回值,請將值指派給函式名稱。 任何數目的這類指派都可以出現在程式內的任何位置。 如果未指派任何值給 name,程式會傳回預設值:數值函式會傳回 0、字串函式會傳回零長度字串 (“”) ,而 Variant 函式會傳回 Empty。 如果未將對象參考指派給名稱,則傳回對象參考的函式會傳回 Nothing (使用函式內的 Set) 。

下列範例示範如何將傳回值指派給函式。 在此情況下, 會將 False 指派給名稱,以指出找不到某些值。

Function BinarySearch(. . .) As Boolean 
'. . . 
 ' Value not found. Return a value of False. 
 If lower > upper Then 
  BinarySearch = False 
  Exit Function 
 End If 
'. . . 
End Function

函式程式中使用的變數分為兩個類別:在程式內明確宣告的變數,以及未宣告的變數。

在程式中明確宣告的變數 (使用 Dim 或對等) 一律是程式的本機變數。 在程式中使用但未明確宣告的變數也是本機的,除非這些變數是在程式外的某個較高層級明確宣告。

程式可以使用未在程式中明確宣告的變數,但如果您在 模組層級 定義的任何專案具有相同的名稱,就會發生命名衝突。 如果您的程式參考與另一個程式、常數或變數同名的未宣告變數,則會假設您的程式參考該模組層級名稱。 明確宣告變數以避免這種衝突。 使用 Option Explicit 語句來強制明確宣告變數。

Visual Basic 可以重新排列算術運算式,以提高內部效率。 當函式變更相同表達式中的變數值時,請避免在算術運算式中使用 Function 程式。 如需算術運算子的詳細資訊,請參閱 運算符

範例

這個範例會使用 Function 語句來宣告形成 Function 程式主體 的名稱、自變數和程序代碼。 最後一個範例使用硬式類型、初始化 的選擇性自變數

' The following user-defined function returns the square root of the 
' argument passed to it. 
Function CalculateSquareRoot(NumberArg As Double) As Double 
 If NumberArg < 0 Then ' Evaluate argument. 
  Exit Function ' Exit to calling procedure. 
 Else 
  CalculateSquareRoot = Sqr(NumberArg) ' Return square root. 
 End If 
End Function

使用 ParamArray 關鍵詞可讓函式接受可變數目的自變數。 在下列定義中,它會以傳值方式傳遞。

Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs()) 
Dim ReturnValue 
' If the function is invoked as follows: 
ReturnValue = CalcSum(4, 3, 2, 1) 
' Local variables are assigned the following values: FirstArg = 4, 
' OtherArgs(1) = 3, OtherArgs(2) = 2, and so on, assuming default 
' lower bound for arrays = 1. 

選擇性自 變數可以有 Variant 以外的預設值和類型。

' If a function's arguments are defined as follows: 
Function MyFunc(MyStr As String,Optional MyArg1 As _
 Integer = 5,Optional MyArg2 = "Dolly") 
Dim RetVal 
' The function can be invoked as follows: 
RetVal = MyFunc("Hello", 2, "World") ' All 3 arguments supplied. 
RetVal = MyFunc("Test", , 5) ' Second argument omitted. 
' Arguments one and three using named-arguments. 
RetVal = MyFunc(MyStr:="Hello ", MyArg1:=7) 

另請參閱

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應