5

私は現在、非常に複雑なフォームを必要とするExcel 2003アプリを構築しており、コントロールの数の制限について心配しています。現在、154のコントロールがあります(使用してカウントされますMe.Controls.Count-これは正確であるはずですよね?)が、おそらく約3分の1しか完了していません。ワークフローは実際には単一のフォームに適合しますが、本当に必要な場合は分割できると思います。

Google検索で、VB6(通常はVBAを含む)にはフォーム内の254コントロールのハード制限があるという証拠があります。ただし、1200をはるかに超えるコントロールを使用してダミーのフォームを作成しましたが、それでもロードされ、正常に機能しているように見えました。

ただし、800個のボタンと150個のラベルなど、コントロールの特定の組み合わせを追加しようとすると、「メモリ不足」エラーが発生し、各タイプのコントロールのメモリ要件によって制限が影響を受ける可能性があると思いました。

私、またはさらに重要なことに、異なる環境を持つ他のユーザーがこのような大きなフォームでメモリの問題に遭遇しないようにするのに役立つ情報を誰かが持っていますか?

4

4 に答える 4

4

ほとんどのMSFormsコントロールはウィンドウレスであり(実際のウィンドウではなく、VBAフォームエンジンによってグラフィカルオブジェクトとして直接描画されます)、比較すると「軽量」です。これは、VB6フォームで同等の非MSFormsコントロールを使用するよりも多くをユーザーフォームにダンプできることを意味します。

上限はわかりませんが、絶対的な制限か、利用可能なリソースによる制限のどちらかになるので、どちらにも遭遇せずに1,200を追加でき、Excelがメモリ使用量の点で動作している場合は、大丈夫です。

とは言うものの、その数のコントロールは、ユーザーに一度に提示するのはまだ非常に多いようです。

于 2010-04-22T10:30:31.757 に答える
3

フォーム上のコントロールの最大数に厳しい制限はありません。別の回答で述べたように、これはハードウェア、Excelのバージョン、およびオペレーティングシステムによって異なります。

残念ながら、コントロールが多すぎるVBAフォームを作成した経験が多すぎます。:(

約200のコントロールを超えると、奇妙な/断続的な発生/エラーに気付く可能性があると言えます。

完全に試行錯誤して私が見つけた1つのことは、通常はラジオボタンのグループを保持するために使用されるフレームコントロールが、他のどのコントロールよりも多くの問題を引き起こすように見えることです。フレームコントロールなしでフォームを作成すると、問題が発生する前に、そのフォームでより多くのコントロールを取得できます。

必要なコントロールの数に関係なく、通常はさまざまなグループに分類できることがわかりました。特定のグループまたはカテゴリに12を超えるコントロール(ラベルを含む)が含まれる場合は、ほとんどの場合、サブフォームを起動するそのカテゴリのボタンを用意することをお勧めします。これは、メインフォームの複雑さを軽減するのに役立ちます。

于 2010-04-22T12:43:40.363 に答える
2

ハードnソフトルールはありません...


VBAが制限するコントロールの数は明確ではありません。
それはあなたがそれを実行しているシステムに完全に依存しています。

一般的な経験則として:

  • コントロールの数を減らします。
  • ボタンの配列の代わりにグリッドコントロールを使用します。
  • さらに簡単にするために、論理形式に分割します。
  • 消費するメモリが少ないため、軽量のコントロール(ハンドルのないコントロール)を使用してください。

これとは別に、画面上でまだ100を超えるコントロールを使用している場合(あなたが言うように)、そのときはプロジェクトに新しいUIデザイナーを雇いました。

幸運を!!

PS:可能であれば、フォームを分割してみてください。
1つの画面に154個のコントロールを表示するソフトウェアを使用することは想像できません。
(MS-WORDはかなり接近しています;-))


更新:以下の参照用にいくつかのもの...

于 2010-04-22T10:11:34.750 に答える
0

私はこれほど大きなユーザーフォームには近づかないようにしています。私はスプレッドシートを使用して、これほど大きなもののデータ収集を処理することを非常に好みます。依存関係がある場合は、必要に応じて行を非表示/再表示するか、複数のシートを使用します。私はそれがより簡単な解決策だと思います(時々)。

于 2010-04-22T15:37:24.140 に答える