サーチ…


コンパイル時のコード動作の変更

#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プロジェクトのプロパティダイアログ

あらかじめ定義された定数

いくつかのコンパイル定数は、あらかじめ定義されています。どちらが存在するかは、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


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow