#If...Then...#Else ディレクティブ構文を使うと、条件付きコンパイルを行うことができます。 条件付きコンパイルとは、ある条件によって、コードの一部をコンパイルしたりしなかったりすることです。コンパイルというと、デバッグ中の動作は制御できないように思われるかもしれませんが、If...Then...Elseステートメントと同様に、条件によってプログラムの流れを変えるものと考えてよいでしょう。
通常、条件付きコンパイルは、1つのコードを異なるシステム(Windows32ビットや16ビット、あるいはMacなど)で共通化するために使用します。しかし、同じシステムの中であっても、テスト環境と本番の環境を切り替えるという目的にも使うことができます。例えば、"Debug.Print"のようなコードを残したまま、本番環境ではそれを実行させない、といったことができます。
次のコードが、条件付きコンパイルの例です。「DEBUG_MODE」という定数の値によって、テスト環境と本番環境を切り替えています。この値を変更するだけで、それ以外のコードはいっさい手を付けずに、切り替えを行うことができます。
Option Compare Database
Option Explicit
#Const DEBUG_MODE = True
Trueのときはテストモードです。本番ではこれをFalseにします
Sub SampleProc()
Dim dbs As Database
Dim rst As Recordset
Dim strAddress As String
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("顧客マスタ")
With rst
Do Until .EOF
#If Not DEBUG_MODE Then
'正式に走らせるときはテーブルのデータを使う
strAddress = rst!住所
#Else
'デバッグ中は住所をイミディエイトウィンドウに表示する
Debug.Print rst!住所
'デバッグ中は常に次のIF文に引っ掛かるようにする
strAddress = "札幌市"
#End If
If strAddress Like "札幌市*" Then
'住所が札幌市ならここで何らかの処理を行います....
End If
.MoveNext
Loop
.Close
End With
#If Not DEBUG_MODE Then
'正式に走らせるときは常にレポートを印刷する
DoCmd.OpenReport "rpt顧客データ"
#Else
'デバッグ中は常にプレビューする
DoCmd.OpenReport "rpt顧客データ", acViewPreview
#End If
End Sub
|