Declare ステートメント

動的リンクライブラリ(DLL) 内の外部プロシージャへの参照を宣言するためにモジュール レベル使用されます。

注意

PtrSafe キーワードを含む Declare ステートメントが推奨される構文です。 64 ビットの数量を格納する必要がある Declare ステートメント (パラメーターと戻り値) のすべてのデータ型が更新され、ポインターとハンドルに LongLongまたは LongPtrを使用した後にのみ、32 ビットおよび 64 ビットプラットフォームの VBA バージョン 7 の開発環境で PtrSafe を含むステートメントが正しく動作します。 VBA バージョン 6 以前との下位互換性を確保するには、次の構造を使用します。

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

構文 1

[パブリック | Private ]Declare Sub name Lib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

構文 2

[パブリック | Private ]Declare Function name Lib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ [ As type ]

VBA7 Declare ステートメントの構文

注意

64 ビット バージョンの Microsoft Office で実行するコードでは、すべての Declare ステートメントに PtrSafe キーワードを含める必要があります。64 ビットの数量を格納する必要がある Declare ステートメント (パラメーターと戻り値) のすべてのデータ型を更新して、ポインターとハンドルに LongLong を使用するか 、LongPtr を使用する必要があります。

構文 1 (Sub)

[パブリック | Private ]宣言 PtrSafe Sub name Lib "libname" [ Alias "aliasname" ] ] [ ( [ arglist ] ) ]

構文 2 (Function)

[パブリック | Private ]宣言 PtrSafe****関数 Lib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ [ As type ]

パーツ 説明
Public 省略可能。 すべてのモジュール内の他のすべてのプロシージャで使用可能なプロシージャを宣言するために使用します。
Private 省略可能。 宣言が実行されたモジュール内でのみ使用可能なプロシージャを宣言するために使用します。
PtrSafe 64 ビットでは必ず指定する必要があります。 PtrSafe キーワードは 、Declare ステートメントが 64 ビット バージョンのアプリケーションで安全に実行Microsoft Office。
Sub 省略可能 (Sub または Function が表示 される必要があります)。 プロシージャが値を返さないことを示します。
Function オプション (Sub または Function を含める必要があります)。 プロシージャが、で使用できる値を返すことを示します。
name 必ず指定します。 任意の有効なプロシージャ名です。 DLL エントリ ポイントでは大文字と小文字が区別されます。
Lib 必ず指定します。 宣言するプロシージャが DLL またはコード リソースに含まれていることを示します。 Lib 句はすべての宣言で必要とされます。
libname 必ず指定します。 宣言するプロシージャが含まれる DLL またはコード リソースの名前です。
Alias オプション。 呼び出されるプロシージャが DLL 内で別の名前を持つことを示します。 これは、外部プロシージャの名前がキーワードと同じ場合に役立ちます。 また、DLL プロシージャの 名前 がパブリック変数、定数、または同じ スコープ内 の他のプロシージャと同じ場合は、Alias を使用 できます。 さらに、DLL プロシージャ名の何らかの文字が DLL の名前付け規則によって許可されない場合にも Alias が便利です。
aliasname オプション。 DLL またはコード リソース内のプロシージャの名前です。 最初の文字が数値記号 ( ) ではない場合、aliasname は DLL 内のプロシージャの # エントリ ポイントの名前です。 ( ) が最初の文字である場合、その後に続くすべての文字は、プロシージャのエントリ ポイントの序数 # を示す必要があります。
arglist 省略可能。 プロシージャの呼び出し に渡される引数を表す変数の一覧。
type 省略可能。 Function プロシージャによって返される値のデータ型。Byte Boolean 、 Integer 、 LongLongLong LongPtrCurrency、 Single 、 Double Decimal (現在サポートされていません)、Date 、String (可変長のみ)、Variant 、ユーザー定義型、またはオブジェクト型を指定できます。 (LongLong は、64 ビット プラットフォームでのみ有効な宣言型です。

arglist 引数の構文と指定項目は次のとおりです。

[省略可能][ ByVal | ByRef ][ ParamArray ]varname [ ( ) ] [ As type ]

パーツ 説明
Optional 省略可能。 引数が必須でないことを示します。 使用する場合は 、arglist 内のすべての後続の引数も省略可能で、Optional キーワードを使用して 宣言する必要 があります。 ParamArray が使用されている場合は、どの引数にも Optional は使用できません。
ByVal 省略可能。 値渡しで引数が渡されることを示します。
ByRef 参照渡しで引数が渡されることを示します。 Visual Basic の既定は ByRef です。
ParamArray 省略可能。 arglist の最後の引数としてのみ使用し、最後の引数が Variant 要素の Optional配列であることを示します。 ParamArray キーワードを使用することで、任意の数の引数を指定できます。 ParamArray キーワードを ByValByRef 、または Optional と共に使用することはできません。
varname 必須です。 プロシージャに渡される引数を表す変数の名前。標準の変数の名前付け規則に従います。
( ) 配列変数で必ず指定します。 varname が配列を示します。
type 省略可能。 プロシージャに渡される引数のデータ型。Byte 、 Boolean 、 Integer 、 LongLongLong LongPtr、 Currency 、 Single 、 DoubleDecimal (現在サポートされていません )、Date 、String (可変長のみ )、Object 、Variant、ユーザー定義型、またはオブジェクト型を指定できます。 (LongLong は、64 ビット プラットフォームでのみ有効な宣言型です。

備考

Declare Sub First Lib "MyLib" () 

引数リストを含める場合、プロシージャが呼び出されるたびに引数の数と型がチェックされます。 次の例では、1 つの Long 引数 を指定 します。

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

注意

  • Declare ステートメントの引数リストに固定長の文字列を 指定する必要 があります。プロシージャに渡すのは可変長文字列のみです。 固定長の文字列はプロシージャ引数として表示できますが、渡される前に可変長文字列に変換されます。
  • vbNullString 定数は、外部プロシージャを呼び出す際に使用されます。外部プロシージャでは、値が 0 の文字列が必要です。 これは長さ 0 の文字列 ("") とは異なります。

次の使用例は 、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. You can 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 のサポートおよびフィードバックを参照してください。