Declare ステートメント

モジュール レベルで使用して、ダイナミック リンク ライブラリ (DLL) 内の外部プロシージャへの参照を宣言します。

注:

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

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

構文 1

[ パブリック | Private ]SubnameLib "libname" [ Alias "aliasname" ] ] [ ( [ arglist ] ) を宣言します。

構文 2

[ パブリック | Private ]関数Lib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ Astype ] を宣言する

VBA7 ステートメント構文を宣言 する

注:

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

構文 1 (Sub)

[ パブリック | Private ]PtrSafeSubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) を宣言する

構文 2 (Function)

[ パブリック | Private ]PtrSafe関数Lib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ Astype ] を宣言する

指定項目 説明
Public 省略可能。 すべてのモジュール内の他のすべてのプロシージャで使用可能なプロシージャを宣言するために使用します。
Private 省略可能。 宣言が実行されたモジュール内でのみ使用可能なプロシージャを宣言するために使用します。
PtrSafe 64 ビットでは必ず指定する必要があります。 PtrSafe キーワード (keyword)は、Declare ステートメントが 64 ビット バージョンの Microsoft Office で安全に実行されることをアサートします。
Sub 省略可能 ( Sub または 関数 が表示される必要があります)。 プロシージャが値を返さないことを示します。
Function オプション (Sub または Function を含める必要があります)。 プロシージャが、で使用できる値を返すことを示します。
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 引数の構文と指定項目は次のとおりです。

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

指定項目 説明
Optional 省略可能。 引数が必須でないことを示します。 このキーワードを使用した場合は、それ以降の arglist 内の引数もすべて省略可能にして、Optional キーワードを使用して宣言する必要があります。 ParamArray が使用されている場合は、どの引数にも Optional は使用できません。
ByVal 省略可能。 値渡しで引数が渡されることを示します。
ByRef 参照渡しで引数が渡されることを示します。 ByRef は、Visual Basic .NET とは異なり、VBA の既定値です。
ParamArray 省略可能。 最後の引数が Variant 要素の省略可能配列であることを示すために、arglist の最後の引数としてのみ使用されます。 ParamArray キーワードを使用すると、任意の数の引数を提供できます。 ParamArray キーワードを ByValByRef 、または Optional と共に使用することはできません。
varname 必須です。 プロシージャに渡される引数を表す変数の名前。は、標準変数の名前付け規則に従います。
( ) 配列変数で必ず指定します。 varname が配列であることを示します。
type 省略可能。 プロシージャに渡される引数のデータ型。は、 ByteBooleanIntegerLongLongLongLongPtrCurrencySingleDoubleDecimal (現在サポートされていません)、 DateString (可変長のみ)、 ObjectVariant、ユーザー定義型、またはオブジェクト型のいずれかです。 (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. 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 のサポートおよびフィードバックを参照してください。