読者です 読者をやめる 読者になる 読者になる

B-Teck!

お仕事からゲームまで幅広く

【VBA】条件付きコンパイル定数を使って、Officeが32ビット版か、64ビット版かを判定する

VBA

Officeが32ビット版か、64ビット版かによってVBAのコードにも変わってくる部分があるため、判定したい場面がある。
VBAにはその仕組みがあるので解説。

条件付きコンパイルとは

設定値等に応じて、実行される部分を変えることができる記述方法。
VBAでは、実行時にPコードと呼ばれる中間コードにコンパイルされるため、
実行環境に応じた処理のみを実行することができる。
ex.)Officeのビット数判定、本番・試験環境の切り分け等

下記コードでは、上記の例についてどちらも記述している。

Option Explicit

#Const DEBUG_FLG = 1
'#Const DEBUG_FLG = 0

Sub test()
    #If VBA7 And Win64 Then
        Debug.Print ("Office64bit版です。")
    #Else
        Debug.Print ("Office32bit版です。")
    #End If
    
    #If DEBUG_FLG = 1 Then
        Debug.Print "デバッグモードです"
    #End If

End Sub


#の用いられている部分が、条件付きコンパイルが行われる部分となる。

#If VBA7 And Win64 Then

という部分が、64ビット版であるかを判定している箇所。

本来は、Win64という定数のみでこのコードが実行されたOfficeのビット数が判定できる。
しかし、64ビット版のOfficeでは、従来使用されていたVBAのバージョンである6ではなく、7を使用していることから、
VBA7という記述でも判定を行うことができる。

#If DEBUG_FLG = 1 Then

が、デバッグモードであるかを判定している箇所。
実行時に、下記のようにコメントを入れ替えてやれば、実行結果が変わる。

'#Const DEBUG_FLG = 1
#Const DEBUG_FLG = 0


地味に知ってた方がいい機会もあるなと思った。