おしゃれにいけてる?

散歩やお買い物のことなどを書いています・・・

Entries

 EXCEL VBA TIPs. (改訂版:デバッグログ、吐きまくりマクロ Ver.0.91 )

 前回紹介した、「デバッグログ、吐きまくりマクロ Ver.0.90 」の改訂版、Ver.0.91(前の Ver.0.10にしときゃ良かった・・・)。

今回追加した機能は、

   「ログの数を返すオプションを追加。」

何に使うかというと、エラーやワーニングを吐き出した後で、

   ERROR: 128
   WARNING: 512

とかって、メッセージボックスとかで表示させるのに使える。

 以下、ソース。EXCEL に直接コピペして使える。(空白は2バイト文字だけど、 EXCEL VBA ではエラーにならないみたい。)

'以下は、プロシジャーの外に書くこと。(どのモジュールに書いても可。)
Public Const LOG_SW  = True   'ログ出力の有効・無効
Public Const LOG_SHEET = "Sheet2" 'ログの出力先シート名
Public Const MAX_LOG  = 2     'ログの本数(何本でも)
Public Const LOG_START_ROW = 2   'ログ出力開始行
Public Const INIT_LOG  = "_INIT" '初期化指定
Public Const LOG_COUNT = "_COUNT" 'ログ数を返す、指定
Public Const ERROR_LOG = 1     'ERROR 用ログ
Public Const OUTPUT_LOG = 2     'データ吐き出しログ

'以下は、ログ吐き出しまくりマクロ本体。
Public Function debugLOG( log As String, opt As Integer )
 Static last_line(MAX_LOG) As Integer  '次にログを書く行
 If Not LOG_SW Then Exit Function
 If log = INIT_LOG Then
  For n = 1 To MAX_LOG
   last_line(n) = LOG_START_ROW
   'ログ領域のクリア
   With ThisWorkbook.Worksheets(LOG_SHEET)
    .Range( .Cells(LOG_START_ROW, n), _
          .Cells(Rows.Count, n)).ClearContents
   End With
  Next
  Exit Function
 ElseIf log = LOG_COUNT Then
  debugLOG = last_line(opt) - LOG_START_ROW
  Exit Function
 End If
 Worksheets(LOG_SHEET).Cells(last_line(opt), opt).Value = log
 last_line(opt) = last_line(opt) + 1
End Function

 戻り値を返すために Function 形式に変更。戻り値が必要ないときは値を返してない。戻り値が必要ないときは、

   Call debugLOG("おしゃいけ", ERROR_LOG))

の形で呼ぶある。

INIT_LOG の定義とか、その debugLOG() 内での参照とか、ビミョウに変えてるので、丸ごと差し替えるのが、よろしある。

当然、ログ文字列として、

   _INIT
   _COUNT

は使えない(対応策として、先頭に"_"を付加したある。)

 使い方は、こんな感じ。

   'LOG 領域の初期化。マクロ開始直後、必ず一度は実行。
   Call debugLOG(INIT_LOG, 0)

   '実際のログの吐き出し。→ エラーログへ
   Call debugLOG("ダメだこりゃ!", ERROR_LOG)
   '実際のログの吐き出し。→ 出力結果ログへ
   n = 1
   Call debugLOG("答えは:" + CStr(n) + "だす", OUTPUT_LOG)

   n1 = debugLOG(LOG_COUNT, ERROR_LOG)
   n2 = debugLOG(LOG_COUNT, OUTPUT_LOG)
   MsgBox("ERROR:"+CStr(n1)+Chr(13)+"OUTPUT:"+CStr(n2))

LOG_START_ROW = 2 の設定だと、LOG_SHEET の2行目から書き始めるので、1行目に、ログ名を書いとくのがいいある。

MAX_LOG の値を増やせば、区別して保存できるログ本数が増える。本数を増やしたら、ERROR_LOG = 1, OUTPUT_LOG = 2, 3, 4, ・・・って感じで、定義を増やしていくだけで、OK ある。

マクロを別モジュールに書いてもいい。LOG_SW を False にすれば、ログは出力されない。マクロのあるワークブックと、参照・処理するワークブックが別になってても、OK どす。

PS. カテゴリーまで作って始めたこのシリーズだけど、VBA の仕事が落ち着いちゃったんで、もう QUEST ネタがない、かも。

スポンサードリンク

Comment

Comment_form

管理者のみ表示。

左サイドメニュー

プロフィール

Author:ジョニー

ゆるゆると日々を過ごしてしまう、ダメダメ野郎の航海日記。



クリック (・。・)yoro

このブログ内を検索

最近の記事

カテゴリー

最近のコメント

QRコード

QRコード

月別アーカイブ

右サイドメニュー

カレンダー

02 | 2020/03 | 04
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

スポンサードリンク

FC2カウンター

#1163