サーチ…


構文

  • Debug.Print(string)
  • 停止()/停止

Debug.Print

イミディエイトウィンドウにエラーコードの説明の一覧を印刷するには、 Debug.Print関数にDebug.Printます。

Private Sub ListErrCodes()
    Debug.Print "List Error Code Descriptions"
    For i = 0 To 65535
        e = Error(i)
        If e <> "Application-defined or object-defined error" Then Debug.Print i & ": " & e
    Next i
End Sub

イミディエイトウィンドウを表示するには、次の操作を行います。

  • Vの IEWを選択| は、メニューバーからウィンドウ mmediate
  • キーボードショートカットCtrl-Gを使用する

やめる

停止コマンドは、呼び出されたときに実行を一時停止します。そこからプロセスを再開したり、ステップごとに実行することができます。

Sub Test()
    Dim TestVar as String
    TestVar = "Hello World"
    Stop                    'Sub will be executed to this point and then wait for the user
    MsgBox TestVar
End Sub

イミディエイトウィンドウ

サブコード全体を実行することなくマクロコードの行をテストする場合は、直接実行ウィンドウにコマンドを直接入力し、 ENTERを押して行を実行することができENTER

行の出力をテストする場合は、その前に疑問符を付けることができ?イミディエイトウィンドウに直接印刷します。または、 printコマンドを使用して出力を印刷することもできます。

Visual Basic Editorで、イミディエイトウィンドウを開くために、 CTRL + G押しながらCTRL + G押します。現在選択されているシートの名前を "ExampleSheet"に変更するには、イミディエイトウィンドウで次のように入力し、 ENTER押しENTER

   ActiveSheet.Name = "ExampleSheet"

イミディエイトウィンドウで現在選択されているシートの名前を直接印刷するには

? ActiveSheet.Name
ExampleSheet

このメソッドは、組み込み関数またはユーザー定義関数の機能をコードに実装する前にテストするのに非常に便利です。以下の例は、イミディエイトウィンドウを使用して、関数または一連の関数の出力をテストして、期待どおりの結果を確認する方法を示しています。

'In this example, the Immediate Window was used to confirm that a series of Left and Right 
'string methods would return the desired string

'expected output: "value"
print Left(Right("1111value1111",9),5) ' <---- written code here, ENTER pressed
value                                  ' <---- output

イミディエイトウィンドウは、アプリケーション、ブック、またはその他の必要なプロパティを設定またはリセットするためにも使用できます。これは、 Application.EnableEvents = Falseをサブルーチン内で予期せずにスローし、値をTrueリセットせずに終了させる場合に役立ちます(これは、イライラして予期しない機能を引き起こす可能性があります。イミディエイトウィンドウに移動して実行します。

? Application.EnableEvents       ' <---- Testing the current state of "EnableEvents"
False                            ' <---- Output
Application.EnableEvents = True  ' <---- Resetting the property value to True
? Application.EnableEvents       ' <---- Testing the current state of "EnableEvents"
True                             ' <---- Output

より高度なデバッグ手法では、コロン:を行区切り文字として使用できます。これは、以下の例ではループなどの複数行の式に使用できます。

x = Split("a,b,c",","): For i = LBound(x,1) to UBound(x,1): Debug.Print x(i): Next i '<----Input this and press enter
a '<----Output
b '<----Output
c '<----Output

タイマーを使用してパフォーマンスのボトルネックを見つける

速度を最適化するための第一歩は、コードの最も遅い部分を見つけることです。 Timer VBA関数は、WindowsベースのPCで1/256秒(3.90625ミリ秒)の精度で真夜中から経過した秒数を返します。 VBAのNowTime機能は1秒間で正確です。

Dim start As Double       ' Timer returns Single, but converting to Double to avoid 
start = Timer             ' scientific notation like 3.90625E-03 in the Immediate window
' ... part of the code
Debug.Print Timer - start; "seconds in part 1" 

start = Timer
' ... another part of the code
Debug.Print Timer - start; "seconds in part 2"

コードにブレークポイントを追加する

実行を停止するVBAコードの行の左側にある灰色の列をクリックすることで、コードにブレークポイントを簡単に追加できます。赤い点が列に表示され、ブレークポイントコードも赤でハイライト表示されます。

コード全体に複数のブレークポイントを追加し、メニューバーの "再生"アイコンを押すことで実行を再開できます。すべてのコードが変数定義行としてブレークポイントになることはできません。プロシージャの最初または最後の行とコメント行をブレークポイントとして選択することはできません。

ここに画像の説明を入力

デバッガローカルウィンドウ

[Locals]ウィンドウでは、実行中の関数またはサブルーチンのスコープ内にある変数とオブジェクトの現在の値に簡単にアクセスできます。問題を見つけるためにコードをデバッグし、変更を進めるためには不可欠なツールです。また、存在しなかったかもしれないプロパティを探索することもできます。

次の例を考えてみましょう。

Option Explicit
Sub LocalsWindowExample()
    Dim findMeInLocals As Integer
    Dim findMEInLocals2 As Range
    
    findMeInLocals = 1
    Set findMEInLocals2 = ActiveWorkbook.Sheets(1).Range("A1")
End Sub

VBAエディタで、[表示] - > [ローカルウィンドウ]をクリックします。

地元のメニューがウィンドウのどこにあるか

次に、サブルーチンの中をクリックした後でF8を使用してコードをステップ実行することによって、findMeinLocalsを割り当てる前に停止しました。値が0であることがわかります。これは決して値を割り当てなかった場合に使用されます。範囲オブジェクトは 'Nothing'です。

このステップでは、変数は何もありません...

変数の表示は何もありません。

サブルーチンが終了する直前に終了すれば、変数の最終値を見ることができます。

デバッグポイントを設定する...必要なら

findMeInLocalsの値は1、型はInteger型、FindMeInLocals2型はRange / Range型です。 +記号をクリックすると、オブジェクトが展開され、カウントや列などのプロパティが表示されます。

ここに画像の説明を入力



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow