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
地味に知ってた方がいい機会もあるなと思った。