2017-05-05 18 views
2

私は時間がかかります(数時間働きます)。だから私はUserFormに2つのものを追加して、手動でマクロを止めたいのです。UserForm - 停止ボタンを追加する

最初のボタンでマクロが開始されます。のは、このマクロのコードが見えると仮定しますように:

For i = 1 to 10000 
    DoEvents 
    If isCancelled Then Exit Sub 
Next i 

私はFalseTrueからisCancelledを変更し、追加の「停止」ボタンを追加することを考えていたが、ボタンがロックされており、中にクリックすることはできませんマクロ実行。このボタンを有効にする方法はありますか?マクロを手動で停止する方法がありますか?

+1

はいこれは可能です –

+0

ありがとうございました。皆さんはこの問題で私を多く助けました! – Nakahed

答えて

0

ループ内でDoEventsを使用する必要があります。ユーザーが応答します。

これを参照してください。answerも参考になります。

+0

ありがとうございました:)あなたはすべてこの問題で私を多く助けました! – Nakahed

1

概念的には、これは可能であり、簡単な例で説明することができます。これは本質的にあなたが言及したコードのタイプです。

ユーザーフォームに2つのボタンがあるとします。これらのボタンは、それぞれプロシージャを開始(または再開)して停止します。もちろん

Option Explicit 
Public isCancelled As Boolean 
Public iVal As Long 
Private Sub CommandButton1_Click() 
Dim i As Long 
If iVal = 0 Then iVal = 1 'Allows the user to resume if it's been "stopped" 
isCancelled = False 
For i = iVal To 100000 
    iVal = i 
    If i Mod 1000 = 1 Then 
     Debug.Print i 
    End If 
    If isCancelled Then 
     GoTo EarlyExit 
    Else 
     DoEvents 
    End If 

Next 
EarlyExit: 
End Sub 

Private Sub CommandButton2_Click() 
    isCancelled = True 
End Sub 

、私はここでやった「継続」オプションを実装する小ぎれいなトリックですが、それはあなたの手順の複雑さに応じて、ますます複雑になることがあり、それはなど、依存関係だと、あなたのフォームがある場合あなたはランタイムがいくつか時間である場合にも、あなたの手順を最適化するために見えるかもしれ

など、ランタイムエラーを導入するよう、ユーザーがこのような形で環境を変更しないことを確認する必要がありますvbModelessを表示します。

+0

ありがとうございました。皆さん、私はこの問題で多くの助けをしました! – Nakahed

+0

@Nakahedこれが問題を解決した場合は、「Accepted」とマークすることを検討してください。 –

関連する問題