- ベストアンサー
VBAユーザーフォームを速く開く方法
- Excel2000を使用し、VBAでユーザーフォーム1と2を作成しています。ユーザーフォーム1のコマンドボタンを押すと、userform2.showが実行されてユーザーフォーム2が開きます。しかし、フォーム2には約400個のテキストボックスなどが設置されており、フォームの開くのに8〜10秒ほどかかります。フォームを速く開く方法について教えてください。
- VBAを使用し、Excel2000でユーザーフォーム1と2を作成しています。ユーザーフォーム1のコマンドボタンを押すと、userform2.showが実行されてユーザーフォーム2が開きますが、フォーム2にはおよそ400個のテキストボックスなどが設置されており、フォームの開く時間が8〜10秒ほどかかっています。フォームを1〜2秒で速く開く方法を教えてください。
- Excel2000を使用し、VBAでユーザーフォーム1と2を作成しています。ユーザーフォーム1のコマンドボタンを押すと、userform2.showが実行されてユーザーフォーム2が表示されますが、フォーム2には約400個のテキストボックスなどがあるため、フォームの表示に8〜10秒ほどかかります。フォームを速く開くための方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
コントロール数の多さに加え、そのひとつひとつに表示切替のようなイベントプロシージャを 書いているのなら、「遅くなる」のは当たり前です。起動速度を改善したいのなら、 そちらを何とかすべきだと思いますよ。たとえば、 1. タブストリップコントロール等を用いて TextBox コントロールを使いまわす ページの切り替え時に値を入れ替える処理を行います。 2. ユーザーフォームはあくまでインターフェースとし、核となる処理は標準 モジュールに書く。結果、ユーザーフォームのメモリ使用量は減り、起動は 早くなります。 など。
その他の回答 (4)
- hige_082
- ベストアンサー率50% (379/747)
メモリへ読み込みのみ表示はしない Load UserForm1 フォームの表示 UserForm1.Show フォームの非表示 UserForm1.Hide メモリから削除 Unload UserForm1 ファイルを開いた時に Loadでメモリにフォームを読み込んでおいて 必要な時にShowでフォームを表示 Hideでフォームを閉じる ファイルを閉じる時に Unloadでメモリから削除する 参考まで
- myRange
- ベストアンサー率71% (339/472)
最初でUserForm1,2を同時に開いて、 UserForm2はHideにしておき 使うときだけShowしてみたらどうでしょうか。 以上です。
- bluecampus
- ベストアンサー率66% (138/209)
リストビューを使うのは駄目でしょうか? リストビュー 追加ボタン、削除ボタン、編集ボタン等と いくつかのテキストボックス で複数行の入力をするとか。 (1列であればリストボックスで同様な感じで) 参考 ListViewコントロールの使い方 http://officetanaka.net/excel/vba/listview/index.htm
補足
このやり方であれば処理は早そうですね! リストボックスを使用する所には気付きませんでした。 しかし今かなりの量のマクロをuserform2で使用している為、リストボックスを使用する方法にすると また1から作り直さないといけない部分があるので、できたらやはり今のまま高速化したいです。。。
- bluecampus
- ベストアンサー率66% (138/209)
>はテキストボックスなどが約400個程 そんなにテキストボックスがあって、一気にすべてユーザが入力するということなのでしょうか? (200個ほど入力して、誤って画面を閉じちゃったりしたら全てやり直し?) 別のコントロールや、複数の段階に分けて入力するということが可能か検討してみてはどうでしょうか?
補足
ユーザーは全て入力する訳ではありません。 テキストボックスは多く設置してありますが、例えばテキストボックス1でkey downしたらテキストボックス2が表示されるような感じで最初から全て表示されてはいません。 あとユーザーではフォーム2のコマンドボタンの閉じるを押さないと、フォームを閉じられないように右上の×ボタンは非表示にしてあります。コマンドボタンの閉じるを押すと入力した内容はエクセルシートに全て保存されるマクロにしてあります。 できれば複数の段階に分けずにに一つのフォームで行った方が作業効率が良いのでそうしたいのですが、 やはり難しいでしょうか?
お礼
回等ありがとうございました。
補足
返答ありがとうございます。 1.については値を入れ替える処理を行うと一度に見れなくなってしまうのでできれば避けたいです。 2.についてはほぼ全てのイベントプロシージャは標準モジュールに書いてあり、ユーザーフォームはインターフェースとして使用しています。 TEXT BOXのひとつひとつにイベントプロシージャを書いているわけではなくFrameでテキストボックスを20個単位くらいでくくり、そのうちのひとつのテキストボックスでkey downすると次のFrameが表示されるようにしてあります。(Visible=True) なのでユーザーフォームにはサブの呼び出しと上記のFrameの表示の程度のプロシージャなのですがどうでしょうか?