0

スプレッドシートにいくつかの図形を描画して移動する VBA サブプログラムがあります。これは私のサブプログラムが呼んだものです

Sub Assignment(amplitude As Double, deltaphase As Double)

フォームから振幅値とデルタ位相値を取得します。私のフォームには「開始、一時停止、再開」の 3 つのボタンがあります。

「スタート」ボタンのコーディング方法を知っています。

Private Sub start_Click()

Dim formAmplitude As Double
Dim formPhase As Double

formAmplitude = assignmentform.ampbox.value
formPhase = assignmentform.phsbox.value

Call Assignment(formAmplitude, formPhase)

End Sub

でも「一時停止」「再開」ボタンはどうすればいいのかわからない…

どんな助けでも大歓迎です

4

1 に答える 1

0

私が通常行うことは、どのユーザーフォームがユーザーに表示されるかを割り当てルーチンと同等に伝えることです。そのため、ルーチンは定期的に (ループ/更新の最後などに) DoEvents を実行し、ボタンクリックイベントがフォームで処理されるようにします。割り当てで DoEvents を呼び出した後、「実行中」などのフォームのブール値フラグをチェックし、それが false の場合は先に進みません。もちろん、「一時停止」ボタンのクリック イベントでは、この Running フラグを false に設定する必要があります。

コードの初期化部分を実行部分とは別の関数で実行する必要があります。これにより、アニメーションを初期化し、フォームを開き、実行コードを呼び出すことができます。これにより、ユーザーが「再生"。

そうしないと、次のようなループが必要になるため、それが理にかなっていることを願っています。

Do While Frm.Running = False
    DoEvents
    Sleep 100
Loop

一時停止/再開のクリックを確認したい場所でそれを行う必要があります。DoEvents 呼び出しにより、[再開] をクリックするまで実行されるループで Excel がフリーズすることはありません。スリープは、CPU 使用率が急上昇しないようにするためのものです。そのためには、適切な Sleep Windows API 呼び出しを使用する必要があります。

于 2013-05-20T14:48:03.233 に答える