#142 テスト環境を作るための条件付きコンパイル VBA

#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
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved