アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA ユーザーフォームを速く開く方法について

現在Excel2000を使用しています。

VBAにてユーザーフォーム1と2を作成して、ユーザーフォーム1のコマンドボタンを押すと
userform2.showが実行されてユーザーフォーム2が開きますが、フォーム2にはテキスト
ボックスなどが約400個程設置してあり、そのせいかフォーム2が開くのに約8~10秒程かかり
ます。

そこでそのフォームを速く開きたいのですが、(1秒~2秒程で)どうしたら速く開くでしょうか?

Application.DisplayFullScreen = Falseなどを使用しても余り効果がありません。
パソコン自体の処理速度もあると思いますが、できるだけ速くしたいです。

よろしくお願いします。

A 回答 (5件)

コントロール数の多さに加え、そのひとつひとつに表示切替のようなイベントプロシージャを


書いているのなら、「遅くなる」のは当たり前です。起動速度を改善したいのなら、
そちらを何とかすべきだと思いますよ。たとえば、

1. タブストリップコントロール等を用いて TextBox コントロールを使いまわす
  ページの切り替え時に値を入れ替える処理を行います。
2. ユーザーフォームはあくまでインターフェースとし、核となる処理は標準
  モジュールに書く。結果、ユーザーフォームのメモリ使用量は減り、起動は
  早くなります。

など。

この回答への補足

返答ありがとうございます。

1.については値を入れ替える処理を行うと一度に見れなくなってしまうのでできれば避けたいです。
2.についてはほぼ全てのイベントプロシージャは標準モジュールに書いてあり、ユーザーフォームはインターフェースとして使用しています。

TEXT BOXのひとつひとつにイベントプロシージャを書いているわけではなくFrameでテキストボックスを20個単位くらいでくくり、そのうちのひとつのテキストボックスでkey downすると次のFrameが表示されるようにしてあります。(Visible=True)

なのでユーザーフォームにはサブの呼び出しと上記のFrameの表示の程度のプロシージャなのですがどうでしょうか?

補足日時:2010/02/16 09:49
    • good
    • 0
この回答へのお礼

回等ありがとうございました。

お礼日時:2010/02/25 11:46

メモリへ読み込みのみ表示はしない


Load UserForm1

フォームの表示
UserForm1.Show

フォームの非表示
UserForm1.Hide

メモリから削除
Unload UserForm1

ファイルを開いた時に
Loadでメモリにフォームを読み込んでおいて
必要な時にShowでフォームを表示
Hideでフォームを閉じる
ファイルを閉じる時に
Unloadでメモリから削除する

参考まで
    • good
    • 0

最初でUserForm1,2を同時に開いて、


UserForm2はHideにしておき
使うときだけShowしてみたらどうでしょうか。

以上です。
    • good
    • 0

リストビューを使うのは駄目でしょうか?



リストビュー
追加ボタン、削除ボタン、編集ボタン等と
いくつかのテキストボックス

で複数行の入力をするとか。
(1列であればリストボックスで同様な感じで)

参考
ListViewコントロールの使い方
http://officetanaka.net/excel/vba/listview/index …

この回答への補足

このやり方であれば処理は早そうですね!
リストボックスを使用する所には気付きませんでした。

しかし今かなりの量のマクロをuserform2で使用している為、リストボックスを使用する方法にすると
また1から作り直さないといけない部分があるので、できたらやはり今のまま高速化したいです。。。

補足日時:2010/02/15 14:24
    • good
    • 0

>はテキストボックスなどが約400個程


そんなにテキストボックスがあって、一気にすべてユーザが入力するということなのでしょうか?
(200個ほど入力して、誤って画面を閉じちゃったりしたら全てやり直し?)

別のコントロールや、複数の段階に分けて入力するということが可能か検討してみてはどうでしょうか?

この回答への補足

ユーザーは全て入力する訳ではありません。

テキストボックスは多く設置してありますが、例えばテキストボックス1でkey downしたらテキストボックス2が表示されるような感じで最初から全て表示されてはいません。
あとユーザーではフォーム2のコマンドボタンの閉じるを押さないと、フォームを閉じられないように右上の×ボタンは非表示にしてあります。コマンドボタンの閉じるを押すと入力した内容はエクセルシートに全て保存されるマクロにしてあります。

できれば複数の段階に分けずにに一つのフォームで行った方が作業効率が良いのでそうしたいのですが、
やはり難しいでしょうか?

補足日時:2010/02/15 11:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A