Declare ステートメントDeclare statement

ダイナミックリンクライブラリ(DLL) 内の外部プロシージャへの参照を宣言するために、モジュールレベルで使用します。Used at the module level to declare references to external procedures in a dynamic-link library (DLL).

注意

PtrSafe キーワードを含む Declare ステートメントが推奨される構文です。Declare statements with the PtrSafe keyword is the recommended syntax. PtrSafe と64ビットの32両方のプラットフォームで VBA バージョン7の開発環境で正しく動作するように宣言されているステートメントは、declare ステートメントのすべてのデータ型 (パラメーターと戻り値) を使用した場合にのみ、store 64 ビットの量は、ポインターとハンドルの64ビット積分またはLongPtrに対してlonglongを使用するように更新されます。Declare statements that include PtrSafe work correctly in the VBA version 7 development environment on both 32-bit and 64-bit platforms only after all data types in the Declare statement (parameters and return values) that need to store 64-bit quantities are updated to use LongLong for 64-bit integrals or LongPtr for pointers and handles. VBA バージョン6以前との下位互換性を確保するには、次の構文を使用します。To ensure backwards compatibility with VBA version 6 and earlier, use the following construct:

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

構文 1Syntax 1

[ Public | Private ]Declare****Sub名前Lib"libname" [ Alias "aliasname"] [([ arglist ])][ Public | Private ] Declare SubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

構文 2Syntax 2

[ Public | Private ]Declare****関数名前Lib"libname" [ Alias "aliasname"] [([ arglist ])] [ **** ][ Public | Private ] Declare FunctionnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ As type ]

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

注意

64ビットバージョンの Microsoft Office でコードを実行するには、すべてのdeclareステートメントにPtrSafeキーワードを含める必要があります。また、64ビット数を格納する必要があるdeclareステートメントのすべてのデータ型 (パラメーターと戻り値) を指定する必要があります。ポインターとハンドルの64ビット積分またはLongPtrに対してlonglongを使用するように更新されました。For code to run in 64-bit versions of Microsoft Office, all Declare statements must include the PtrSafe keyword, and all data types in the Declare statement (parameters and return values) that need to store 64-bit quantities must be updated to use LongLong for 64-bit integrals or LongPtr for pointers and handles.

構文 1 (Sub)Syntax 1 (Sub)

[ Public | Private ]Declare****PtrSafe****Sub名前Lib"libname" [ Alias "aliasname"] [([ arglist ])][ Public | Private ] Declare PtrSafe SubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

構文 2 (Function)Syntax 2 (Function)

[ Public | Private ]Declare****PtrSafe****関数名前Lib"libname" [ Alias "aliasname"] [([ arglist ])] [ **** ][ Public | Private ] Declare PtrSafe FunctionnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ As type ]

パーツPart 説明Description
PublicPublic 省略可能。Optional. すべてのモジュール内の他のすべてのプロシージャで使用可能なプロシージャを宣言するために使用します。Used to declare procedures that are available to all other procedures in all modules.
PrivatePrivate 省略可能。Optional. 宣言が実行されたモジュール内でのみ使用可能なプロシージャを宣言するために使用します。Used to declare procedures that are available only within the module where the declaration is made.
PtrSafePtrSafe 64 ビットでは必ず指定する必要があります。Required on 64-bit. PtrSafe キーワードは、 Declareステートメントが、64ビットバージョンの Microsoft Office で実行しても安全であることを表明します。The PtrSafe keyword asserts that a Declare statement is safe to run in 64-bit versions of Microsoft Office.
SubSub 省略可能 ( Sub または**Function** のどちらかを指定する必要があります)。Optional (either Sub or Function must appear). プロシージャが値を返さないことを示します。Indicates that the procedure doesn't return a value.
FunctionFunction オプション (Sub または Function を含める必要があります)。Optional (either Sub or Function must appear). プロシージャが、で使用できる値を返すことを示します。Indicates that the procedure returns a value that can be used in an expression.
namename 必須です。Required. 任意の有効なプロシージャ名です。Any valid procedure name. DLL エントリポイントでは大文字と小文字が区別されることに注意してください。Note that DLL entry points are case-sensitive.
LibLib 必須です。Required. 宣言するプロシージャが DLL またはコード リソースに含まれていることを示します。Indicates that a DLL or code resource contains the procedure being declared. Lib 句はすべての宣言で必要とされます。The Lib clause is required for all declarations.
libnamelibname 必ず指定します。Required. 宣言するプロシージャが含まれる DLL またはコード リソースの名前です。Name of the DLL or code resource that contains the declared procedure.
AliasAlias 省略可能。Optional. 呼び出されるプロシージャが DLL 内で別の名前を持つことを示します。Indicates that the procedure being called has another name in the DLL. これは、外部プロシージャの名前がキーワードと同じ場合に役立ちます。This is useful when the external procedure name is the same as a keyword. また、DLL プロシージャの名前がパブリック変数定数、または同じスコープ内の他のプロシージャと同じ場合は、エイリアスを使用することもできます。You can also use Alias when a DLL procedure has the same name as a public variable, constant, or any other procedure in the same scope. さらに、DLL プロシージャ名の何らかの文字が DLL の名前付け規則によって許可されない場合にも Alias が便利です。Alias is also useful if any characters in the DLL procedure name aren't allowed by the DLL naming convention.
aliasnamealiasname 省略可能。Optional. DLL またはコード リソース内のプロシージャの名前です。Name of the procedure in the DLL or code resource. 最初の文字が番号記号 (#) ではない場合、 _aliasname_は DLL のプロシージャのエントリポイントの名前です。If the first character is not a number sign (#), aliasname is the name of the procedure's entry point in the DLL. (#) が最初の文字である場合は、その後に続くすべての文字が、プロシージャのエントリポイントの序数を示している必要があります。If (#) is the first character, all characters that follow must indicate the ordinal number of the procedure's entry point.
arglistarglist 省略可能。Optional. プロシージャが呼び出されたときに渡される引数を表す変数のリストです。List of variables representing arguments that are passed to the procedure when it is called.
typetype 省略可能。Optional. Functionプロシージャによって返される値のデータ型ByteBooleanIntegerLonglonglongLongPtrCurrencySingleDoubleDecimal (現在はサポートされていません)、日付、文字列の場合があります。 (可変長のみ)、 Variantユーザー定義型、またはオブジェクト型Data type of the value returned by a Function procedure; may be Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (not currently supported), Date, String (variable length only), Variant, a user-defined type, or an object type. (Longlongは、64ビットプラットフォームでのみ有効な宣言型です。)(LongLong is a valid declared type only on 64-bit platforms.)

arglist 引数の構文と指定項目は次のとおりです。The arglist argument has the following syntax and parts:

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

パーツPart 説明Description
OptionalOptional 省略可能。Optional. 引数が必須でないことを示します。Indicates that an argument is not required. このパラメーターを使用する場合、 _arglist_内の後続の引数もすべて省略可能であり、 optionalキーワードを使用して宣言されている必要があります。If used, all subsequent arguments in arglist must also be optional and declared by using the Optional keyword. ParamArray が使用されている場合は、どの引数にも Optional は使用できません。Optional can't be used for any argument if ParamArray is used.
ByValByVal 省略可能。Optional. 値渡しで引数が渡されることを示します。Indicates that the argument is passed by value.
ByRefByRef 参照渡しで引数が渡されることを示します。Indicates that the argument is passed by reference. Visual Basic の既定は ByRef です。ByRef is the default in Visual Basic.
ParamArrayParamArray オプション。Optional. arglist の最後の引数としてのみ使用し、最後の引数が Variant 要素の Optional配列であることを示します。Used only as the last argument in arglist to indicate that the final argument is an Optional array of Variant elements. ParamArray キーワードを使用することで、任意の数の引数を指定できます。The ParamArray keyword allows you to provide an arbitrary number of arguments. ParamArray キーワードを ByValByRef 、または Optional と共に使用することはできません。The ParamArray keyword can't be used with ByVal, ByRef, or Optional.
varnamevarname 必須です。Required. プロシージャに渡される引数を表す変数の名前を指定します。標準の変数の名前付け規則に従います。Name of the variable representing the argument being passed to the procedure; follows standard variable naming conventions.
( ) 配列変数で必ず指定します。Required for array variables. _Varname_が配列であることを示します。Indicates that varname is an array.
typetype 省略可能。Optional. プロシージャに渡される引数のデータ型です。ByteBooleanIntegerLonglonglongLongPtrCurrencySingleDoubleDecimal (現在はサポートされていません)、日付文字列の場合があります。(可変長のみ)、 objectVariant、ユーザー定義型、またはオブジェクト型。Data type of the argument passed to the procedure; may be Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (not currently supported), Date, String (variable length only), Object, Variant, a user-defined type, or an object type. (Longlongは、64ビットプラットフォームでのみ有効な宣言型です。)(LongLong is a valid declared type only on 64-bit platforms.)

注釈Remarks

Declare Sub First Lib "MyLib" () 

引数リストを含める場合、プロシージャが呼び出されるたびに引数の数と型がチェックされます。If you include an argument list, the number and type of arguments are checked each time the procedure is called. 次の例では、1つのLong引数を取ります。The following example takes one Long argument:

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

注意

  • Declareステートメントの引数リストに固定長文字列を指定することはできません。プロシージャに渡すことができるのは、可変長文字列だけです。You can't have fixed-length strings in the argument list of a Declare statement; only variable-length strings can be passed to procedures. 固定長文字列はプロシージャの引数として表示されますが、渡される前に可変長文字列に変換されます。Fixed-length strings can appear as procedure arguments, but they are converted to variable-length strings before being passed.
  • 外部プロシージャを呼び出すときには、外部プロシージャには値が0である文字列が必要なので、 Vbnullstring定数が使用されます。The vbNullString constant is used when calling external procedures, where the external procedure requires a string whose value is zero. これは長さ 0 の文字列 ("") とは異なります。This is not the same thing as a zero-length string ("").

Example

この例では、 declareステートメントを標準モジュールのモジュールレベルで使用して、ダイナミックリンクライブラリ (DLL) 内の外部プロシージャへの参照を宣言する方法を示します。This example shows how the Declare statement is used at the module level of a standard module to declare a reference to an external procedure in a dynamic-link library (DLL). Declare ステートメントが Private の場合、 Declare ステートメントをクラス モジュール内に配置できます。You can place the Declare statements in class modules if the Declare statements are Private.

' 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 
 

関連項目See also

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.