VBA で ProgressBar UserForms をモーダルまたはモードレスとして表示する方が良いですか? VBA で進行状況インジケーターを開発するためのベスト プラクティスは何ですか?
モードレス ユーザー フォームでは を使用する必要がありますがApplication.Interactive = False
、モーダル ユーザー フォームはその性質上、コア プロシージャが終了するかキャンセルされるまで、アプリケーションとの対話をブロックします。
ただし、 が使用されている場合Application.Interactive = False
、Esc キーはコードの実行を中断するため、ユーザー フォームと呼び出し元のプロシージャの両方でApplication.EnableCancelKey = xlErrorHandler
エラー処理 ( ) を使用する必要があります。Err.Number = 18
リソースを大量に使用する呼び出し手順によって、モードレス ユーザー フォームCommandButton_Click
でイベントが発生することもあります。UserForm_Activate
一般に、モーダル ユーザー フォームを使用する進行状況インジケーターは、実行中のコードがユーザー フォーム モジュールに完全に含まれており、変数を渡す必要が少ないため、単純に見えます。
ただし、進行状況インジケーターにモーダル UserForms を使用する場合の問題は、進行状況インジケーターを必要とするすべてのプロシージャに対して個別の UserForm モジュールが必要になることです。これは、呼び出し元のプロシージャが UserForm_Activate プロシージャ内にある必要があるためです。
そのため、モードレス ユーザー フォームで単一の再利用可能な進行状況インジケーターを使用することは可能ですが、複数のモーダル ユーザー フォーム内からコードを実行するよりも信頼性が低くなります。
どちらの方法が良いですか?
ありがとう!