5

次の場合に、あらゆる種類の厄介なエラーが発生することに気付きました。

  • ワークシート (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 コンボボックスは悪の化身であり、問​​題に値しないとかなり確信しています。代わりに、これらのコンボボックスをユーザーフォーム モジュール内に含めるように切り替えました。ランダムな視覚的アーティファクトやクラッシュ (データの損失を伴う) よりも、ポップアップ フォームでユーザーに不便を強いることをお勧めします。

4

5 に答える 5

3

明確な答えはありませんが、約 10 年前に ActiveX コントロールに ListFillRange と LinkedCell を使用するのをやめたと言えます。特にどんな問題に遭遇したかは覚えていません。彼らが私を救ったわずかな時間は、バグを追跡しようとする脳の痛みに値しないという結論に達したことを覚えています. そのため、コードを使用してコントロールにデータを入力し、イベントで出力を処理します。

于 2010-02-25T15:13:08.967 に答える
2

デルのユーザーとフォーマットの問題について部分的な返信があります

書式設定と表示の問題は、既知ではあるが文書化されていない Excel の問題です。

多くのフラット パネル モニター (ラップトップ ディスプレイを含む) は、Excel スプレッドシートのテキスト ボックス コントロールでフォントを正しくレンダリングできません。この問題の軽度のバージョンがあります。

私たちの会社は最近、新しい (そしてはるかに大きい!) モニターにアップグレードし、ワークシートでテキスト ボックス、ラベル、およびコンボ ボックスを使用できるようになりました。Samsung の古い画面ではテキスト コントロールが正しく表示されていましたが、手動または VBA による更新では文字が重なって判読できなくなりました。

リストボックスには問題はありません。問題があるのは、コンボ ボックスの「テキスト ボックス」部分です。VBA イベント プロシージャでリストボックスを操作してみてください。これは面倒ですが、機能します。

データ検証リストからのセル内ドロップダウンには問題はありません。セルの検証リストを設定し、データ検証エラー メッセージを空の文字列に設定すると、セルに自由形式のテキストを入力できます。ドロップダウン リストは推奨事項であり、必須の制限リストではありません。

この問題は、Active-X コントロールでターミナル フォントまたはシステム フォントを使用することで改善されることがあります (ただし、完全に修正されることはありません)。

この問題は、VBA イベントを使用して Active-X コントロールを 0.75 mm 微調整またはサイズ変更することで改善される場合があります (完全に修正されることはありません)。

ラップトップの製造元がディスプレイ ドライバーのアップグレードをリリースしているかどうかを確認します。

...フォント レンダリングの問題について私が知っているのはこれだけです。マイク (Dell ラップトップを使用) がこれを読んでいる場合: これらの回避策で頑張ってください。私の知る限り、本当の「修正」はありません。

Excel 2003 が登場するまで、安定性の問題は私にとって大きな頭痛の種でした。シートで Active-X コントロールを使用すると、不安定になる原因でした。Excel 2003 であっても、シートに埋め込まれた Listbox コントロールについてはまだ判断がつかない: 私はまだ使用を避けている。

于 2010-12-02T19:00:57.857 に答える
2

私の Active-X コンボ ボックスは、Dell がドッキングされているときは正常に動作しますが、Dell がドッキングされていないときにクリックするたびに大きなフォントにサイズ変更されます。非常に奇妙です。ドッキング解除時に機能するサイズ変更コードを追加しましたが、ドッキング時とプログラムによるトリガー時に .height と .scaleheight の両方が失敗します (見知らぬ人もいます)。

        Sheet2.Shapes("cb_SelectSKU").Select
        Selection.ShapeRange.Height = 40
        Selection.ShapeRange.ScaleHeight 0.8, msoFalse, msoScaleFromTopLeft

次に、独自の enableevents のようなスイッチを追加して、マクロの実行中に何かが影響を受けたときではなく、ユーザーがコンボボックスの値を選択したときにのみサイズ変更が行われるようにしました。

Select Case strHoldEvents
    Case Is = "N"                                                   'Combobox resizing fails with error when triggered programatically (from SaveData)

        Call ShowLoadShts

        Sheet2.Shapes("cb_SelectSKU").Select
        Selection.ShapeRange.Height = 40
        Selection.ShapeRange.ScaleHeight 0.8, msoFalse, msoScaleFromTopLeft


    Case Else
End Select

最後に、ドッキングされているかどうかに関係なく、ユーザーによってトリガーされたか、手順中にトリガーされたかにかかわらず、それは機能するようです。それが保持されるかどうかを確認します...

于 2010-11-30T20:41:05.670 に答える
0

このため、スプレッドシートにコンボ ボックスを配置するときは、データ検証リストを含むセルを使用します。

于 2010-02-25T16:44:57.167 に答える