Delare 陳述式

模組層級使用以宣告對動態連結程式庫 (DLL) 中外部程序的參考。

注意事項

具有 PtrSafe 關鍵字的 Declare 陳述式是建議的語法。 包含 PtrSafeDeclare 陳述式只有在 Declare 陳述式 (參數和傳回值) 中需要儲存 64 位元數目的所有資料型別更新為使用 LongLong (對於 64 位元整數) 或 LongPtr (對於指標和控制代碼) 後,才能在 32 位元和 64 位元平台的 VBA 版本 7 開發環境中正確運作。 若要確保 VBA 版本 6 或更早版本的回溯相容性,請使用下列建構︰

#If VBA7 Then 
Declare PtrSafe Sub... 
#Else 
Declare Sub... 
#EndIf

語法 1

[ 公用 | Private ] 宣告名稱Liblibname” [ Aliasaliasname” ] [ ( [ arglist ] ) ]

語法 2

[ 公用 | Private ] 宣告式名稱Liblibname” [ Aliasaliasname” ] [ ( [ arglist ] ) ] [ Astype ]

VBA7 Declare 陳述式語法

注意事項

若要讓程式碼在 64 位元版本的 Microsoft Office 中執行,所有 Declare 陳述式都必須包含 PtrSafe 關鍵字,且在 Declare 陳述式 (參數和傳回值) 中需要儲存 64 位元數目的所有資料型別都必須更新為使用 LongLong (對於 64 位元整數) 或 LongPtr (對於指標和控制代碼)。

語法 1 (Sub)

[ 公用 | Private ] 宣告PtrSafe名稱Liblibname” [ Aliasaliasname” ] [ ( [ arglist ] ) ]

2 (Function)

[ 公用 | Private ] 宣告PtrSafe式名稱Liblibname” [ Aliasaliasname” ] [ ( [ arglist ] ) ] [ Astype ]

部分 描述
Public 選用。 用來宣告可供全部模組中所有其他程序使用的程序。
Private 選用。 用來宣告只能在建立該宣告之模組中使用的程序。
PtrSafe 64 位元的必要項。 PtrSafe 關鍵字會判斷提示 Declare 陳述式是否能夠安全地在 64 位元版本的 Microsoft Office 中執行。
Sub 選用 (SubFunction 必須擇一出現)。 表示程序並不會傳回值。
Function 選用 (SubFunction 必須擇一出現)。 表示程序傳回可在運算式中使用的值。
name 必要。 任何有效的程序名稱。 請注意,DLL 進入點區分大小寫。
Lib 必要。 表示 DLL 或代碼資源包含所宣告的程序。 Lib 子句是所有宣告的必要項。
libname 必要。 包含所宣告程序之 DLL 或代碼資源的名稱。
Alias 選用。 表示所呼叫的程序在 DLL 中有另一個名稱。 這在外部程序名稱與關鍵字相同時非常有用。 當 DLL 程序具有相同的公用變數常數、或在同一個範圍中任何其他程序名稱時,您也可以使用 Alias。 如果 DLL 程序名稱中的任何字元不受 DLL 命名慣例所允許,Alias 也很有用。
aliasname 選用。 DLL 或代碼資源中的程序名稱。 如果第一個字元不是數字記號 (#),則 aliasname 為 DLL 中的程序進入點名稱。 如果 (#) 為第一個字元,後面的所有字元都必須都指出程序進入點的序號。
arglist 選用。 變數清單,代表呼叫時傳遞至程序的引數
type 選用。 Function 程序所傳回值的資料型別;可能是 ByteBooleanIntegerLongLongLongLongPtrCurrencySingleDoubleDecimal (目前不支援)、DateString (僅可變長度),Variant使用者定義型別,或物件型別。 (LongLong 只有在 64 位元平台上是有效的宣告型別。)

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

[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ Astype ]

部分 描述
Optional 選用。 表示引數不是必要的。 如果使用, arglist 中的所有後續自變數也必須是選擇性自變數,並使用 Optional 關鍵詞來宣告。 如果已使用 ParamArray ,則不能在任何引數中使用 Optional
ByVal 選用。 表示引數以傳值方式傳遞。
ByRef 表示引數以傳參考方式傳遞。 ByRef 是 VBA 中的預設值,與 Visual Basic .NET 不同。
ParamArray 選用。 僅作為arglist中的最後一個自變數,以指出最終自變數是 Variant 元素的選擇性陣列。 ParamArray 關鍵字可讓您提供引數的任意數。 ParamArray 關鍵字不能與 ByValByRef ,或 Optional 一起使用。
varname 必要。 表示傳遞至程序引數的變數名稱;依循標準變數命名慣例。
( ) 陣列變數的必要項。 表示 varname 是一個陣列。
type 選用。 傳遞至程序之引數的資料型別;可能是 ByteBooleanIntegerLongLongLongLongPtrCurrencySingleDoubleDecimal (目前不支援)、DateString (僅可變長度)、ObjectVariant、使用者定義型別或物件型別。 (LongLong 只有在 64 位元平台上是有效的宣告型別。)

備註

Declare Sub First Lib "MyLib" () 

如果您包含引數清單,引數的數目和型別會在每次呼叫程序的時候受到檢查。 在下列範例中,使用一個 Long 引數:

Declare Sub First Lib "MyLib" (X As Long) 

注意事項

  • 您不能在 Declare 陳述式的引數清單中有固定長度字串;只有可變長度字串可以傳遞到程序。 固定長度字串可作為程序引數顯示,但它們會在傳遞之前轉換成可變長度字串。
  • 當呼叫外部程序,而外部程序需要的字串其值為零時,會使用 vbNullString 常數。 這和零長度字串 ("") 不一樣。

範例

此範例顯示 Declare 陳述式如何在標準模組的模組層級上使用,來宣告對動態連結程式庫 (DLL) 中外部程序的參考。 如果 Declare 陳述式為 Private,您可以將 Declare 陳述式置於類別模組中。

' In Microsoft Windows (16-bit): 
Declare Sub MessageBeep Lib "User" (ByVal N As Integer) 
' Assume SomeBeep is an alias for the procedure name. 
Declare Sub MessageBeep Lib "User" Alias "SomeBeep"(ByVal N As Integer) 
' Use an ordinal in the Alias clause to call GetWinFlags. 
Declare Function GetWinFlags Lib "Kernel" Alias "#132"()As Long 
 
' In 32-bit Microsoft Windows systems, specify the library USER32.DLL, 
' rather than USER.DLL. Use conditional compilation to write 
' code that can run on either Win32 or Win16. 
#If Win32 Then 
    Declare Sub MessageBeep Lib "User32" (ByVal N As Long) 
#Else 
    Declare Sub MessageBeep Lib "User" (ByVal N As Integer) 
#End If 
 
 
' 64-bit Declare statement example: 
Declare PtrSafe Function GetActiveWindow Lib "User32" () As LongPtr 
 
' Conditional Compilation Example 
#If Vba7 Then 
     ' Code is running in  32-bit or 64-bit VBA7. 
     #If Win64 Then 
          ' Code is running in 64-bit VBA7. 
     #Else 
          ' Code is not running in 64-bit VBA7. 
     #End If 
#Else 
     ' Code is NOT running in 32-bit or 64-bit VBA7. 
#End If 
 

另請參閱

支援和意見反應

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