2017-08-16 14 views
1

変更イベントに関する一般的な問題があります。変更イベントの無限ループをどのように解決できますか?

ユーザーがフィルタやセルなどの変更を加えた場合に更新されるユーザーフォームとワークシートを設計しました。

問題は今、以下である:何かが変更された場合

、変更イベントがトリガされ、いくつかのことを変更し、これは、同じイベントをトリガし(細胞、リスト、フィルタのect。)。このように、無限ループの変更イベントが発生します。

Public EventsEnabled as boolean 

Sub Change_Event() 
If EnableEvents Then 
EnableEvents=False 
    enter code which cannot triggers Change_Event here 
End If 
EnableEvents=True 
End Sub 

だから基本的に私は可能とした、私は自分で使う変更イベントを無効にすることで、この問題を迂回しています:私の現在のソリューションはfollwingです。

質問:これは最高の解決策ですか、それとももっと簡単で速く、よりエレガントなものがありますか? VBAプロジェクトがリセットされたとき、あなたのイベントが動作することを確認

Public EventsDisabled as boolean 

Sub Change_Event() 
If EventsDisabled Then Exit Sub 
EventsDisabled=True 
    enter code which cannot triggers Change_Event here 
EventsDisabled=False 
End Sub 

これらの変更:

+0

イベントが有効になっていることを確認する必要がありますか?そうでない場合、このコードは実行されていますか? –

答えて

2

はIMOこれはあなたがあなたのコードを変更して、最も信頼性の高いソリューションです。

+0

よろしくお願いいたします。 –

0

コードを実行する前にWorksheet_Changeサブ内にApplication.EnableEvents = Falseを入れてください。コードが完成したら、Application.EnableEvents = Trueでイベントを再びオンにします。

これにより、コードの実行中にExcelが(Worksheet_Changeなどの)イベントを発生させないようにします。

関連する問題