• ベストアンサー

VBAです。ユーザーフォームの表示させ、標準モジュールを読み込ませる方法について

こんばんわ。 教えていただけないでしょうか。。。 ワークシート上にコマンドボタンがあり、それを押すと集計を始めます。 その際にユーザーフォームで「集計中」と書いたものを表示させ、バックで集 計したいと思っておりますが、うまくいっておりません。 流れとしては、 ワークシート上に、コマンドボタンをクリックさせユーザーフォームを表示さ せる「***.show」を記述し、集計するためのコードが書いてある標準モジュー ル「module2」へ移動させる書き方をしたら、 ***.show の部分で止まってしまいました。 ***.showから集計のコードへ移すには何かコツがいるのでしょうか??? 恐れ入りますが、ご教示のほど宜しくお願いします。

  • uk0221
  • お礼率59% (124/209)

質問者が選んだベストアンサー

  • ベストアンサー
  • ape5
  • ベストアンサー率57% (85/148)
回答No.4

ANo2の方のを少し改良すると 'シートモジュール---------------------------------------------- Private Sub CommandButton1_Click()  Call Test End Sub '標準モジュール---------------------------------------------- Sub Test() Dim i As Long  UserForm1.Show vbModeless  DoEvents  For i = 1 To 2000   ActiveSheet.Range("A" & i) = i   'ここを改良   If i mod 10 = 0 then    UserForm1.Caption = "ただいま処理中・・・・" & i    DoEvents   End if  Next i  Unload UserForm1 End Sub ウィンドウズの処理(メッセージキュー?)の中では、画像処理の優先度が低いのです。 なので、表示を更新したい場合はDoEventsを入れて、表示をリフレッシュさせるのです。

uk0221
質問者

お礼

ありがとうございます。 > ウィンドウズの処理(メッセージキュー?)の中では、画像処理の優先度が低いのです。 なので、表示を更新したい場合はDoEventsを入れて、表示をリフレッシュさせるのです。 > なるほど。。。 お蔭様で完成させることができました。 ありがとうございます。 今後とも何卒宜しくお願いいたします。

その他の回答 (3)

  • kenken0
  • ベストアンサー率24% (46/190)
回答No.3

とりあえず切り分けします。 Private Sub Frm集計中_Activate() msgbox "テスト" 食費DB化 End Sub MsgBoxをユーザーフォームのコードに追加して、メッセージボックスが出てくるか確認してください。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

Show を モードレスで実行すれば良いかと思います、、、たぶん。 下記はアクティブシートのA列に書込みに行くので、試すなら新規ブックで。 'シートモジュール---------------------------------------------- Private Sub CommandButton1_Click()  Call Test End Sub '標準モジュール---------------------------------------------- Sub Test() Dim i As Long  UserForm1.Show vbModeless  DoEvents  For i = 1 To 2000   ActiveSheet.Range("A" & i) = i   UserForm1.Caption = "ただいま処理中・・・・" & i  Next i  Unload UserForm1 End Sub

uk0221
質問者

お礼

ありがとうございます。 うまくいきました。 しかしユーザーフォームに書いた内容(「集計中...」)という文字が表示されておらずの状態です。 処理時間は10秒くらいですが、vbmodelessだと文字は表示されないものなのでしょうか? 恐れ入りますが、お時間ある時に教えていただければと思います。 宜しくお願い致します。

  • kenken0
  • ベストアンサー率24% (46/190)
回答No.1

一例ですが・・ シート1にこんなマクロを書いて Private Sub CommandButton1_Click() UserForm1.Show End Sub ユーザーフォームには Private Sub UserForm_Activate() test '名前です End Sub 標準モジュールには Sub test() '実行させたいコード unload userform1 End Sub これで動くはずですよ。

uk0221
質問者

お礼

ありがとうございます。 それでもユーザーフォームで止まってしまっているような気がしますして、以下に実際に書いたコードを記しますので添削をお願いできませんか? (ワークシート上のコマンドボタン) Private Sub 食費DB_Click() Frm集計中.Show End Sub (ユーザーフォームのコードです) Private Sub Frm集計中_Activate() 食費DB化 End Sub (標準モジュールに書いたコードです) Sub 食費DB化() Unload Frm食費DB化 End Sub --- お願い致します。。。

関連するQ&A

  • ユーザーフォームが表示前にエラーになります。

    お世話になります。 Excelのシート上にコマンドボタンを配置して それをクリックするとユーザーフォームが表示されるようにしたいのですが、下記のコードだと「フォーカスがありません」と1行目でエラーで止まってしまいます。 解決方法を教えてください。 Private Sub コマンドボタン_Click() ユーザーフォーム.Show End Sub よろしくお願いします!

  • エクセルのユーザーフォームについて

    現在、ワークシートの内容を見やすくするためにユーザーフォームを使用し表示させています。印刷は、ユーザーフォームにコマンドボタンを配置し、ワークシートを印刷しています。 せっかくユーザーフォームで見やすいレイアウトにしているので、表示させた内容をユーザーフォームごと印刷できればと考えています。 画面のハードコピーとかではなくて、コマンドボタンをクリックすることで印刷したいのですが、どなたか教えてください。

  • エクセルVBA ユーザーフォームのボタン

    ユーザーフォームにCommandButton1があります ワークシートにもCommandButton2があります ユーザーフォーム上のCommandButton1をクリックすることで、ワークシート上のCommandButton2をクリックするという命令は作れるのでしょうか? ワークシート上のCommandButton2をクリックした後の命令は出来ているのですが、そのコードをコピーしてユーザーフォーム上のCommandButton1のコードにコピーするしかないのでしょうか? 実行ボタン(CommandButton2)をワークシートに作成したので、 ユーザーフォームで入力→ ユーザーフォーム上のボタン(CommandButton1)をクリック→ ユーザーフォームは終了→ ワークシート上の実行ボタン(CommandButton2)をクリック してくれると良いかと思いました よろしくお願いします

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

    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

  • VBA 標準モジュールとフォーム (続き)

    先ほど、同じ質問タイトルで質問させていただいたものです。この場合どうなりますか? モジュールでの変数file_nameをフォームのボタンをクリックしたら"text.xls"が表示されるようにしたいです。 (イメージとしては、エクセルのsheet1にコマンドボタンがあってクリックするとフォームが立ち上がってフォームのコマンドボタンをクリックすると"test.xls"が表示される) モジュール Private Sub CommandButton1_Click() ←エクセルsheet1にボタンがある   dim file_name as string file_name="test.xls"   UserForm1.Show End Sub フォーム(UserForm1) Sub CommandButton1_Click() ←フォームにボタンがある MsgBox file_name End Sub

  • VBAエクセルのフォームについて

    お世話になっております。 VBAエクセルのフォームについて教えていただきたいのです。 VBAで入力のフォームを作ったのですが(TEXT BOXが4つ、コマンドボタン1つ、コマンドボタンを押したときに登録される用にしたい) 各シートの集計にしたい為、各シート(31のシートがあります)に入力フォームがあります、その各シートでの入力結果を1つのシートに 集計したいのですが、どの様なコードにしたらようか判りません。 素人のためお手数ですが、なるべく判りやすくお願いします。 よろしくお願いします。

  • ユーザーフォームの表示

    マクロでユーザーフォームを作成しました それをワークシート上に表示させたいのですが方法がわかりません ネットで調べてみるとShowメソッドを使うとありますがやり方がイマイチわからないのです。 どなたかわかりやすく解説して下さい

  • ユーザーフォームのプロパティが表示しなくなる。

    ワークシートのコマンドボタンでユーザーフォームを表示しテキストボックスに入力後、ワークシートに転記するマクロを作成しているのです。 途中で作動テストをすると上手く動きましたが、しばらく放置し又、動かしてみるとえエラー出る。 調べようとしてもユーザーフォームのプロパティがパスコードエラーで全く表示されなくなっている。 その後自動保存される。 再度開きなおして作動させると作動するけど又、同じ現象になる。 プログラミングの問題なのでしょうか。

  • エクセルVBA ユーザーフォームの終了について

    エクセルVBAでユーザーフォームを作成しています。 コマンドボタンにVBAマクロを割り当てしているのですが 思うように動いてくれないので質問します。 コマンドボタンをクリックしたら望む動作 1、ワークシートを選択 2、その後、ユーザーフォームを消す。 と言う動作にしたいのですが、2の ユーザーフォームを消す方法、書き方が分かりません どなたか教えていただけないでしょうか 1の動作は以下のように書いています。その後の書き方を お願いします。 Private Sub CommandButton8_Click() ブック名 = "VBA演習" シート名 = "sheet1" Workbooks(ブック名 & ".xls").Worksheets(シート名).Activate End Sub (ユーザーフォームの名前は"テストフォーム"としてます)

  • エクセルVBAでグラフ表示

    エクセル2002使用です。 ユーザーフォームを作り、そこにコマンドボタンを置いています。コマンドボタンをクリックすると、ワークシート上にあるグラフを表示したいのですが・・・ Private Sub CommandButton1_Click() Charts("Graph4").Select Charts("Graph4").Activate End Sub 問題が2つ出てしまいました。 1.ワークブック内でシートは切り替わるのですが、グラフがユーザーフォームの後ろに隠れてしまったままでユーザーフォームの手前に表示できない。 2.グラフ(シート)を表示した後、ユーザーフォームに戻る方法がわからない。 ユーザーフォームからシートにあるグラフを表示させたい場合は、どのような方法がベストなのでしょうか?できれば、ユーザーフォーム上ですべてを行いたいのですが、グラフ作成のコードも新たに作らないと駄目なのでしょうか? 質問の仕方も難しく説明不足かもしれませんが、よろしくお願いします。

専門家に質問してみよう