次の場合に、あらゆる種類の厄介なエラーが発生することに気付きました。
- ワークシート (Excel フォームではない) に ActiveX コンボボックスがあります。
- コンボボックスには、イベント コードがリンクされています (onchange イベントなど)。
- listfillrange または linkedcell プロパティを使用します (これらのプロパティをクリアすると、多くの問題が軽減されるようです)
- (これが接続されているかどうかはわかりません)が、ターゲットのリンクセルでデータ検証があります。
大量のイベント処理を行い、多くのコントロールを使用する、かなり複雑な Excel アプリケーションをプログラムしています。何ヶ月もの間、私はこれらのコンボ ボックスを扱うさまざまなバグに対処しようとしてきました。各インスタンスのすべての詳細を思い出すことはできませんが、これらのバグには、名前付き範囲で listfillrange および linkedcell プロパティを指す傾向があり、多くの場合、不適切なタイミングでトリガーされるコンボ ボックス イベント (application.enableevents の場合など) に関係しています。 = false)。これらの問題は Excel 2007 で大きくなったように見えたので、これらのコンボ ボックスを完全にあきらめなければなりませんでした (現在は、シートに直接ではなく、ユーザー フォームに含まれるコンボ ボックスを使用しています)。
他の誰かが同様の問題を見たことがありますか? もしそうなら、優雅な解決策はありましたか?Google で調べてみましたが、これまでのところ、同様の問題を抱えている人は見つかりませんでした。
私が見ることになる症状のいくつかは次のとおりです。
- 起動時に Excel がクラッシュします (combobox_onchange、listfillrange -> 別の別のシートの名前付き範囲、および workbook_open の相互作用が含まれます)。(ユーザーが直接編集した場合に備えて、リンクされたセルでデータ検証も行ったことに注意してください。)
- Excel レンダリングのバグ (通常、コンボ ボックスが変更されると、別のシートの一部のセルが現在のシートの上にランダムに描画されます) 時々、画面全体が別のシートにフラッシュすることがあります。
- Excel が気を失う (というか、コール スタック) (最初の箇条書きに関連)。関数がコンボボックスのプロパティを変更すると、コンボボックスの onchange イベントが発生することがありますが、最初に変更を引き起こした関数に制御が返されることはありません。application.enableevents = false の場合でも、combobox_onchange イベントがトリガーされます。
- 発生すべきではないときに発生するイベント (これに関連するスタック オーバーフローに関する別の質問を投稿しました)。
この時点で、私は、ActiveX コンボボックスは悪の化身であり、問題に値しないとかなり確信しています。代わりに、これらのコンボボックスをユーザーフォーム モジュール内に含めるように切り替えました。ランダムな視覚的アーティファクトやクラッシュ (データの損失を伴う) よりも、ポップアップ フォームでユーザーに不便を強いることをお勧めします。