VBAで開発を行っていると、実行環境の混在やデバッグ用コマンドなどによってコードをある時には有効にしておきたいが、別の時には無効にしたいということがよくあります。
この時条件付きコンパイラを使用すれば簡単にコードの有効無効切り替えがっできます。
今回はこの条件付きコンパイラについて勉強しました。
Contents
コメントアウトによる実行コードの変更
条件付きコンパイルを知る前、私はデバッグ用コードや実行環境の変更を次のようにコメントによって行っていました。
1 2 3 4 5 6 7 |
Sub main() test1 'enviroment A 'test2 'enviroment B 'test3 'Debug mode End sub |
しかしこのようなコメントアウトによる実行コードの変更は次のような問題点があります。
- 時間がかかりメンドウ
- 変更に漏れや抜けが起きる可能性が多い
条件付きコンパイル
条件付きコンパイルはC言語のプリプロセッサのように、ある条件をもとに実行するコードを変更することができます。
上記のコードを持ちに条件付きコンパイルを使用した例を挙げます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#Const conEnv = 1 'enviroment A '#Const conEnv = 1 'enviroment B '#Const conEnv = 1 'debug Sub main () #IF (conEnv = 1) Then test1 #Endif #IF (conEnv = 2) Then test2 #Endif #IF (conEnv = 3) Then test3 #Endif End Sub |
上記のコードでconEnv の値を変更することによって実行するコードを変更することができます。
コードの説明
- #const : 条件付きコンパイル用の定数宣言
- #IF A Then B #Endif : コードブロックを指定するディレクティブ。 A にコードを実行する条件を、B に実行するコードを記述する。
システムが提供するコンパイラ定数
定数は自分で定義するだけではなくシステムが提供してくれるものもあります。例を下に示します。
bit数 | Win16 | Win32 | Win64 |
バージョン | Vba6 | Vba7 |
これらの定数を使用すれば実行環境ごとに、使用するコードを自動的に変更することができます。
プロジェクト全体での条件付きコンパイルの使用
条件付きコンパイル用に宣言された定数のスコープはmodle内だけです。プロジェクト全体で条件付きコンパイルを使用したい場合は次のプロジェクトのプロパティから設定します。
プロパティ内の条件付きコンパイル引数に定数名とその値を入力すれば、プロジェクト全体で条件付きコンパイルを利用できます。
まとめ
- コメントアウトによる実行コードの選択はミスが多く、煩わしい
- 環境や条件によって実行するコードを変更するときは条件付きコンパイルを使用する
- #Const で条件付きコンパイル用定数を定義する
- #If ~ Then ~ #Endif で実行条件と実行コードを囲う
- プロジェクト全体で使用する場合は、プロジェクトのプロパティで定数を設定する
参考文献