サーチ…
コンパイル時のコード動作の変更
#Const
ディレクティブは、カスタムプリプロセッサ定数を定義するために使用されます。これらは後で#If
によってコンパイルされ実行されるコードのブロックを制御するために使用されます。
#Const DEBUGMODE = 1
#If DEBUGMODE Then
Const filepath As String = "C:\Users\UserName\Path\To\File.txt"
#Else
Const filepath As String = "\\server\share\path\to\file.txt"
#End If
これにより、 filepath
の値が"C:\Users\UserName\Path\To\File.txt"
に設定され"C:\Users\UserName\Path\To\File.txt"
。 #Const
行を削除するか、 #Const
#Const DEBUGMODE = 0
変更すると、 filepath
は"\\server\share\path\to\file.txt"
に設定され"\\server\share\path\to\file.txt"
。
#Const Scope
#Const
ディレクティブは、単一のコードファイル(モジュールまたはクラス)に対してのみ有効です。これは、カスタム定数を使用するすべてのファイルごとに宣言する必要があります。また、ツール>> [プロジェクト名]プロジェクトプロパティに#Const
して、プロジェクトの#Const
グローバルに宣言することもできます。これにより、プロジェクトプロパティダイアログボックスが表示され、ここで定数宣言を入力します。 [constName] = [value]
条件付きコンパイル引数[constName] = [value]
ボックスに[constName] = [value]
ます。 [constName1] = [value1] : [constName2] = [value2]
ように、1つ以上の定数をコロンで区切って入力でき[constName1] = [value1] : [constName2] = [value2]
。
あらかじめ定義された定数
いくつかのコンパイル定数は、あらかじめ定義されています。どちらが存在するかは、VBAを実行しているオフィスバージョンのビット数によって異なります.Vba7は、Office 2010と共に64ビットバージョンのOfficeをサポートするために導入されました。
定数 | 16ビット | 32ビット | 64ビット |
---|---|---|---|
Vba6 | 偽 | Vba6 | 偽 |
Vba7 | 偽 | Vba7の場合 | 真 |
Win16 | 真 | 偽 | 偽 |
Win32 | 偽 | 真 | 真 |
Win64 | 偽 | 偽 | 真 |
マック | 偽 | Macの場合 | Macの場合 |
Win64 / Win32は、Windows版ではなくOffice版であることに注意してください。たとえば、OSが64ビット版のWindowsであっても、32ビット版OfficeではWin32 = TRUEとなります。
すべてのバージョンのOfficeで動作するインポートを宣言する
#If Vba7 Then
' It's important to check for Win64 first,
' because Win32 will also return true when Win64 does.
#If Win64 Then
Declare PtrSafe Function GetFoo64 Lib "exampleLib32" () As LongLong
#Else
Declare PtrSafe Function GetFoo Lib "exampleLib32" () As Long
#End If
#Else
' Must be Vba6, the PtrSafe keyword didn't exist back then,
' so we need to declare Win32 imports a bit differently than above.
#If Win32 Then
Declare Function GetFoo Lib "exampleLib32"() As Long
#Else
Declare Function GetFoo Lib "exampleLib"() As Integer
#End If
#End If
これは、サポートする必要のあるオフィスのバージョンに応じて少し簡素化することができます。たとえば、まだ16ビット版のOfficeをサポートしている人はほとんどいません。 16ビットオフィスの最後のバージョンは1994年にリリースされたバージョン4.3であったため、ほぼすべての現代的なケース(Office 2007を含む)では次の宣言で十分です。
#If Vba7 Then
' It's important to check for Win64 first,
' because Win32 will also return true when Win64 does.
#If Win64 Then
Declare PtrSafe Function GetFoo64 Lib "exampleLib32" () As LongLong
#Else
Declare PtrSafe Function GetFoo Lib "exampleLib32" () As Long
#End If
#Else
' Must be Vba6. We don't support 16 bit office, so must be Win32.
Declare Function GetFoo Lib "exampleLib32"() As Long
#End If
Office 2010より古いものをサポートする必要がない場合、この宣言はうまくいきます。
' We only have 2010 installs, so we already know we have Vba7.
#If Win64 Then
Declare PtrSafe Function GetFoo64 Lib "exampleLib32" () As LongLong
#Else
Declare PtrSafe Function GetFoo Lib "exampleLib32" () As Long
#End If