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 プロシージャによって返される値のデータ型。は、Byte、Boolean、Integer、Long、LongLong、LongPtr、Currency、Single、Double、Decimal (現在サポートされていません)、Date、String (可変長のみ)、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 キーワードを ByVal 、 ByRef 、または Optional と共に使用することはできません。 |
varname | 必須です。 プロシージャに渡される引数を表す変数の名前。は、標準変数の名前付け規則に従います。 |
( ) | 配列変数で必ず指定します。 varname が配列であることを示します。 |
type | 省略可能。 プロシージャに渡される引数のデータ型。は、 Byte、 Boolean、 Integer、 Long、 LongLong、 LongPtr、 Currency、 Single、 Double、 Decimal (現在サポートされていません)、 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. 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 のサポートおよびフィードバックを参照してください。