• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA ユーザーフォームを速く開く方法について )

VBAユーザーフォームを速く開く方法

KenKen_SPの回答

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

コントロール数の多さに加え、そのひとつひとつに表示切替のようなイベントプロシージャを 書いているのなら、「遅くなる」のは当たり前です。起動速度を改善したいのなら、 そちらを何とかすべきだと思いますよ。たとえば、 1. タブストリップコントロール等を用いて TextBox コントロールを使いまわす   ページの切り替え時に値を入れ替える処理を行います。 2. ユーザーフォームはあくまでインターフェースとし、核となる処理は標準   モジュールに書く。結果、ユーザーフォームのメモリ使用量は減り、起動は   早くなります。 など。

yasu7r
質問者

お礼

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

yasu7r
質問者

補足

返答ありがとうございます。 1.については値を入れ替える処理を行うと一度に見れなくなってしまうのでできれば避けたいです。 2.についてはほぼ全てのイベントプロシージャは標準モジュールに書いてあり、ユーザーフォームはインターフェースとして使用しています。 TEXT BOXのひとつひとつにイベントプロシージャを書いているわけではなくFrameでテキストボックスを20個単位くらいでくくり、そのうちのひとつのテキストボックスでkey downすると次のFrameが表示されるようにしてあります。(Visible=True) なのでユーザーフォームにはサブの呼び出しと上記のFrameの表示の程度のプロシージャなのですがどうでしょうか?

関連するQ&A

  • Excel VBAで、ユーザーフォームの値を、モジュールで使用したい。

    VBA初心者です。(おそらく)基本的な質問で、申し訳ありません。 ユーザーフォーム1には、テキストボックス1とコマンドボタン1が配置されているとします。 Sub TEST () Dim N Userform1.Show MsgBox N End Sub Private Sub CommandButton1_Click() Dim N N = TextBox1.Text UserForm1.Hide End Sub Sub TESTを実行した時に、ユーザーフォーム1からNの値を引き継ぐには、どうしたら良いのでしょうか?よろしくお願いします。

  • Excel VBAで別のブックからユーザーフォームの閉じる

    Excel VBAで別のブックからユーザーフォームの閉じたいのですが うまくいきません。 教えてください。 Private Sub CommandButton2_Click() Application.Visible = False Unload Workbook.("材料リスクマップ検索Ver2.xls")UserForm3・・・・※ Workbooks.Close userform3:=ThisWorkbook.Path & "あああ.xls" Workbooks("\いいい.xls").Close savechanges:=False UserForm1.Show vbModeless End Sub ※印のところが赤字にかわります。 コマンドボタン2は、いいい.xlsにあり、フォームを閉じたいのはあああ.xlsのUserform3です。 その後、ファイル名いいい.xlsは閉じます。 コードが間違っているかと思いますが、どんな風にすればよいかわかりません。初歩的なこととは思いますがよろしくお願い致します。

  • エクセルVBAのユーザーフォーム上のテキストボックスについての質問です

    エクセルVBAのユーザーフォーム上のテキストボックスについての質問です。 Aのユーザーフォームの内容をBのユーザーフォームのテキストボックスへ引き継いで、Bのユーザーフォーム上で内容を編集するという仕組みにしたいのです。 Bのユーザーフォームは新規入力もかねたユーザーフォームなので、テキストボックスのイベントにAfterUpdateを使用して、テキストボックスの内容が書き換えられるとデータベースから検索して新規か既存か判断させています。 AのユーザーフォームからBのユーザーフォームのテキストボックスへ引継ぎさせるときにこのAfterUpdateを発生させたくないのですが、Application.EnableEvents=Falseなどを使ってもイベントが発生してしまいます。 また、イベントがどのタイミングで発生するかと、コードをステップで実行させると、このイベントは発生しません。そのために、いきづまってしまいました。 AのユーザーフォームからBに引き継ぐ処理  ユーザーフォームB.Load ---ユーザーフォームBのイニシャライズが実行される  ユーザーフォームB.テキストボックス = ユーザーフォームA.テキストボックス  ユーザーフォームB.Show ちょっと簡単に書きすぎですがこんな感じです。 コードをステップで実行するとユーザーフォームBのAfterUpdateは実行されません。(VBAエディタのバグ?) どなたか回答お願いします。

  • VBA ユーザーフォーム

    エクセルVBAのユーザーフォームのInitializeでnに値を代入し Private Sub UserForm_Initialize() Dim n As Long n = 19 ・・・・・ End Sub 同じユーザーフォームのボタンコマンドが押されたら Private Sub CommandButton2_Click() MsgBox n Worksheets("AAA").Cells(n, 3).Value = Me.テキストボックスの値.Text n = n + 1 End Sub nの値を用いてセルにテキストボックスの値を入れるというプログラムです。 値をいれたら、nをひとつ増やして次に備えるようにしたいのですが。 そもそも最初にnの値が受け渡しできません。 ボタンコマンドの最初の行でメッセージボックスにnの値を表示して確認しても何も数字が表示されません。 nの値の受け渡しを方法を教えてください。

  • 複数のユーザーフォームをコマンドボタンにて表示・非表示させるには

    VBA勉強中のものです。 複数のユーザーフォームをコマンドボタンを使用して画面への表示切替を考えております。 例)ユーザーフォーム1,ユーザーフォーム2,ユーザーフォーム3のそれぞれにコマンドボタン1,コマンドボタン2,コマンドボタン3を作成し、   コマンドボタン1→ユーザーフォーム1を表示   コマンドボタン2→ユーザーフォーム2を表示   コマンドボタン3→ユーザーフォーム3を表示 とするようなことを考えおります。  そこで、下記のようにコードを作成したのでですが,一度表示させたユーザーフォームを再度表示させようとコマンドボタンをクリックしたら、「フォームはすでに表示させているのでモーダル表示はできません」とエラーがでてしまいます。   どなたか、どのようにしたらいいかご教授ねがいます。 サンプルコード) --------------------------------------------------- 'UserForm1のコード Private Sub CommandButton2_Click() Call UserForm2_show UserForm1.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm1.Hide End Sub ---------------------------------------------------- 'UserForm2のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm2.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm2.Hide End Sub ------------------------------------------------------- 'UserForm3のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm3.Hide End Sub Private Sub CommandButton2_Click() Call UserForm2_show UserForm3.Hide End Sub ------------------------------------------------------------ '標準モジュール コード Sub UserForm1_show() UserForm1.Show End Sub Sub UserForm2_show() UserForm2.Show End Sub Sub UserForm3_show() UserForm3.Show End Sub

  • Excel vbaでフォームの起動が失敗する

    Excelシート上に設置したユーザフォームを開くボタンを実行するとフォームが開かずに新規のExcelシートが開いてしまいます。 以前までは正常に作動していたんですが••• ちなみにボタンの実行前に vbaの編集画面を一度でも開いた後はボタンを押したら正常にフォームが開くんです。 フォームを開くコード sub 起動() UserForm1.Show End Sub フォームのInitializeはコンボボックスのみです。 原因がわかりましでしょうか?

  • VBAでユーザーフォームの表示を確認

    VBAでユーザーフォームが表示されていなかったら UserForm1.Show vbModeless で表示させるようなプログラムを組みたいのですが 表示されているかどうかはそのようなコードで調べることができますでしょうか?

  • EXCEL VBA ユーザーフォーム内に入力パットを設置する方法について

    EXCEL VBAについて質問があります。うまく説明できるかちょっと自信が無いのですが。 Userformを挿入し、フォーム内にテキストボックスを一個と コマンドボタンを複数設置する。 コマンドボタンはTakeFocusOnClickをFalseにする。 Private Sub CommandButton1_Click() SendKeys "{A}" End Sub これで テキストボックスに「A」という文字が入るはずですが、 このやり方で日本語入力を行い、スペースキーを押して 漢字変換が出来るようにするにはどうしたらよろしいのでしょうか。 SendKeys "{あ}" では確定された「あ」が入力されてしまい、 スペースキーを押しても変換が出来ません。 SendKeys "{a}" だと変換は出来るのですが、あ~おまでの母音だけしか入力ができず、か行以降の入力が出来ませんでした。 IMEの設定と関係があるのかなとも思ったのですが、色々いじっても どうもうまく出来ませんでした。 どうぞよろしくお願いいたします。

  • 2つのユーザーフォームの表示切替(Excel2002VBA)

    Excel2002VBAを使用しています。 UserForm1 に CommandButton1 を配置したものと UserForm2 に CommandButton2 を配置したもの があります。 UserForm1が表示されている時、CommandButton1 を クリックすると、UserForm2 が表示され UserForm1 が非表示になり、 UserForm2 が表示されている時  CommandButton2 をクリックすると UserForm1 が 表示され UserForm2 が非表示になる というように 画面上にどちらか一方だけユーザーフォームを表示 させたいのですが上手くいきません。 CommandButton1 の Clickイベントに UserForm2.show vbmodeless Unload UserForm1 CommandButton2 の Clickイベントに UserForm1.show vbmodeless Unload UserForm2 と記述したのですが、実行すると、 ”このオブジェクトは、ロードまたはアンロード することはできません。”とエラー表示が出てき ます。 何とぞご教授よろしくお願いいたします。

  • EXCEL VBAのユーザーフォームに引数を渡す方法について

    すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。 シート上にコマンドボタンを2つ用意する。 コマンドボタン1を押すと変数mは1 コマンドボタン2を押すと変数mは2 としてユーザーフォームを呼び出す。 Public m As Integer Private Sub CommandButton1_Click()  m = 1  Call フォーム呼び出し(m) End Sub Private Sub CommandButton2_Click()  m = 2  Call フォーム呼び出し(m) End Sub Sub フォーム呼び出し(m As Integer)  UserForm1.Show End Sub 次にユーザフォームにコマンドボタンを1個置き、 ボタンを押したとき、mが1であれば「ボタン1」 mが2であれば「ボタン2」 とメッセージボックスを出し、ユーザーフォームを閉じる。 Private Sub CommandButton1_Click()   If m = 1 Then    MsgBox "ボタン2"   ElseIf m = 2 Then    MsgBox "ボタン2"   End If  Unload UserForm1 End Sub プロシージャ間の引数渡しは色々なテキストに載っているのですが ユーザーフォームに引数を渡す方法はどうも見つからず、 Private Sub CommandButton1_Click(m) としても、コンパイルエラーとなってしまいます。 よろしくご教示をお願いいたします。