プロジェクトに大きなユーザーフォームがあり、メモリに読み込まれるときに問題が発生します。 Userform_Initialize
イベントにはエキゾチックなことはありません(コンボボックスに入力してデフォルトのプロパティを設定するだけです)。 ユーザーフォームがそれほど大きくない(KBで測定された)数週間前にすべてうまくいきました。最初は、ワークブックが壊れていて、すべてのユーザーフォーム、モジュール、クラスをエクスポートし、新しいワークブックに再インポートした後、いつものようにプロジェクトをコンパイルしていました。これで問題は解決されませんでした。面白いことに、をinitializeイベントの先頭に置き、コードをステップ実行すると、すべて正常に動作します。Excel VBAプロジェクトがコンパイル後にクラッシュする
主なアイデア
これは私は、このようにメモリにユーザーフォームをロードするプロセスは、典型的なより長いを取って、問題の原因は、ユーザーフォームが非常に大きいという事実であることを考えるようになりました負荷。基本的には、vbエディタはinitializeイベントでコードを実行し続け、まだメモリにない可能性のあるコントロールにアクセスしようとしています。
私は、問題のユーザーフォームの大きさのかなり良いアイデアを得るためにいくつかの原油分析を行っています。ユーザーフォームがエクスポートされ、空のブックに再インポートされました。ユーザーフォームのないワークブックは30 KB
で、ユーザーフォームは350 KB
を超えていたので、ユーザーフォームは320 KB
であると判断できます。
私はプロジェクトで大規模なエラー処理がありますが、この特定のエラーがinitializeイベントで発生していると特定できないことに注意してください(この特定のイベントではエラー処理が不可能です[Bovey、プロフェッショナルエクセルの開発、ページ489])。
質問:時間遅延(WindowsのAPIを使用して、例えばApplication.Wait
またはSleep
)を除いて、クラッシュを回避するための別のアプローチはありますか?
UPDATE
これは、アプリケーションを遅らせることはどちらか確実に動作しなかったことが判明しました。実際にInitializeイベント全体を無駄に削除しました。元の投稿で言及していたことを忘れていたことの1つは、Debug -->> Compile VBA Project
の機能を悪用していたことでした。下の私の答えを見てください。
ブロックでコードを試したことがありますか?問題が何であるかはコンボのトリガーの可能性があります。 –
438のようなクラッシュの前にエラーメッセージが表示されますか? – cyboashu
@ Nathan_Sav、そうです。私はコードのすべてのサブセクションにコメントして、アプリケーションを実行し、プログラムはまだinitializeイベントでクラッシュします。 –