Excel VBAの実行を手動で一時停止する方法


1

通常、EscまたはCtrl + Breakを使用してVBAコードを停止しますが、Visual Studioのように実行を一時停止する方法はありますか?

回答:


1

プロジェクトのロックが解除されて表示可能な場合、Ctrl-Breakは現在のステートメントで一時停止/中断する必要があります。コードでクラスを使用する場合は、VBEのTools.Options .. Generalタブ:Break in Class Modulesを選択する必要がありますが、元に戻すことを忘れないでください。そうしないと、実稼働環境で予期しない結果が生じる可能性があります。

Excelシート/コントロールからのイベントの発生を停止する必要がある場合Application.EnableEvents = Falseは、イミディエイトウィンドウまたはコードで使用できます。


これに答えていることに気づきました。しかし、Ctrl + Breakが機能しないことがあるため、同じことを考えていました。ただし、一時停止は休憩とは異なります。実行を一時停止するとは、med実行で停止し、中断したところから続行できることを意味します。実行を中断するとは、リターンなしで実行を直ちに終了することを意味します。
ejbytes

1

VBAはシングルスレッドアプリケーションであるため、イベントに応答できません。受け入れられた答えは、それを行う1つの方法です。別の方法は、コマンドDoEventsを長時間実行ループ内のコードに追加することです。

For i = 1 to 10000
    ' Do something long
    DoEvents
Loop

1

特定のプロセスが実行されるのを待つ必要がある場合、PIDを以下の関数に渡すことができます。プロセスの実行が完了すると、VBステートメントの通常の実行が再開されます。

Public Sub processCHK(cid As Long)

Dim strComputer As String
Dim colProcesses
Dim objWMIService

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Do
        DoEvents
        ' Update the collection of processes returned

        Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE ProcessID " & " = '" & cid & "'")


    Loop Until colProcesses.count = 0
End Sub  
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.