私は相対的なVBA初心者で、10秒から10分の間に実行できるかなり複雑なマクロを設計しています。 Dim appDatabaseInstance = New Excel.Application
によって作成されたExcelの別の不可視のインスタンスでの作業のほとんどを行います。コード実行中に多くの関数とサブルーチンが使用されていますが、半予測可能なものがあればいつでもappDatabaseInstance.Quit
が呼び出されるように最善を尽くしていますが、私が制御できないものが1つありますユーザー。予期しない後にポストマクロのガベージコレクションを可能にする名前付きExcel.Applicationオブジェクトの作成方法
具体的には、プログラムがクラッシュしてエスケープすると判断した場合、VBAは実行を中断し、ブレークが発生したためにガベージコレクションルーチン(私は思う)は実行されません。
私は予測可能な方法で作成したインスタンスに何らかの名前を付けて、新しいインスタンスを作成する前に既存のインスタンスを見つけて適切に処理しようとすればもっと幸せです。そうすれば、たとえ不幸なアプリケーションインスタンスが残っていても、ユーザーがプログラムに関わる何かを試みるとすぐに閉じられます(そうでなければ、1つのインスタンスがコンテキスト内で頭痛を引き起こす可能性は低いです)。
誰にも提案はありますか?
ユーザーにプログレスバーを表示していますか?そうでなければ、これは彼らの忍耐を助けるだろうか? – brettdj
当分の間ではありませんが、実際には進捗状況をどのようにして確実に測定するのかは100%もわかりません。それは、私が言うように、初心者を完了させると言った。 – tobriand
スコープが予測できない場合は、確かに報告するのが難しくなります.....私は[Walkenbachのプログレスバー](http://spreadsheetpage.com/index.php/tip/displaying_a_progress_indicator/)を私のaddins(私のプロフィールを参照してください)、Duplicate Masterでは 'EnableCancelKey'に' xlDisable'オプションを使用しましたが、ユーザフォームで 'Cancel'をクリックして制御された終了になったかどうかを定期的に確認します。 – brettdj