• 締切済み

userform1の終了に同期を取りたい。

ユーザーフォームを勉強し始めました。 標準モジュールに、 sub oya() userform1.show end sub として、userform1を表示しています。 そしてuserform1で、諸々の設定をしています。 oyaでは、この設定を使って作業をします。 ここで質問です。 oyaの作業は、userform1で設定した内容を使うため、 処理が終わるのを待つ必要がありますが、 その書き方が分かりません。 今現在は、単純にuserform1.showの下に処理を書いているので、 設定する前に空欄を使うような状況になってしまっています。 sub oya() userform1.show  処理ロジック end sub 分かりにくいでしょうが、 宜しくご指導下さい。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>処理が終わるのを待つ必要があります その「処理」ってのが具体的に「何」なのか、そして肝心の「oyaの作業」って何なのか、何も情報が無いんですが。 【考え方その1】 ご相談の書き振りを素直に読むなら sub macro1()  Userform1.show ’「前処理」を行う ’「親の作業」を行う end sub のように、順繰り記述し実行させるだけです。 【違う考え方】 まずユーザーフォームを表示する sub macro1() userform1.show end sub その後、手作業でもなんでも必要に応じて「前処理」を行う 前処理が終わったら、コマンドボタンでも押させて「親の処理」を実行させる 【別の考え方】 sub macro1()  laod userform1 ’「前処理」を行う  userform1.show ’「親の処理」を行う end sub ユーザーフォームをいきなりshowしちゃう人が実際多いですが、本来(?)はまずloadしてユーザーフォームを実装し、必要な「前処理」を施した後にshowします。 またUserForm_Initializeイベントを併用し、ロードの直後にイニシャライズイベントで「前処理」を行い、その後showするような方法も利用できます。

nagahaha
質問者

お礼

お世話になります。 本プログラムはユーザーが自分のデータを入力することで、 結果が返る。という代物です。 そして本プログラムの処理部分をoyaと称してコードしています。 これまでは、ユーザーからの情報をinputboxで受けていたのですが、 質問に書いたように、userformを勉強しようと思い、 inputbox部分をuserform1に置き換えたということです。 inputboxなら、上から下に制御が流れますので問題なかったのですが、 userform1にしたら、showしたと同時に制御が流れてしまうので、 useroform1による情報の入力が済んだことを確認して、 後続処理を開始したいと。 そのため、同期を取りたいと質問しました。 ズバリ、分からないなりにイメージですが Do While userform1処理中 DoEvents Loop のようなことがやりたいのです。 userform1がunloadされた情報が調べられれば解決ですが。 分かりにくい説明で恐縮です。 引き続き宜しくお願いします。

nagahaha
質問者

補足

色々有り難うございました。 以下で解決しました。 Do While userform1.visible DoEvents Loop お世話になりました。

関連するQ&A

  • UserFormの呼出について

    VBAで「出退勤時間管理」のプログラムを作っています。 各種の初期値、設定値をユーザーフォームで入力するのですが、 フォームを出すとき(ツールバーにマクロを登録しています。) 「アプリケーション定義またはオブジェクト定義のエラーです。」と出ます。 ツールバーに登録したマクロは、標準モジュールに記述しています。 試しに、別のエクセルファイルで簡単なマクロを組んでみました。 フォームにテキストボックスを貼り付け、標準モジュールにこれを呼び出すマクロを記述しました。 ---- 標準モジュール------ Private sub OpenForm() UserForm1.TextBox1.Text = "No Problem !!!" UserForm1.Show End sub ------------------------- これはうまくいきました。 全くエラーはでません。 同じように書いたコードが、片方はエラーが出ることが、さっぱりわかりません。 本体のコードは、結構多くファイルサイズが647kBになっています。 コードの量の制限とか、あるのでしょうか。 どなたか詳しい方、助言をお願い致します。

  • バックアップするとuserformが使えない

    ユーザーフォームを設定した後で、次のプログラムを起動するとユーザーフォームを開こうとしても「パスが無効です」とでて使えなくなります。 Public Sub test() UserForm3.Show ActiveWorkbook.SaveCopyAs ThisWorkbook.Path & "\バックアップ\" & ActiveWorkbook.Name UserForm2.Show Unload UserForm3 Unload UserForm2 End Sub また、プログラム中にシステムエラーとでたり、「オブジェクトが見つかりません」とでたりします。 いったいなぜなのか。どうすれば回避できるのか教えてください。お願いします ちなみにプログラムを実行するときはエクセルファイルと同じ階層に「バックアップ」というフォルダを作ってください。 このプログラムを実行した後は保存しないことをお勧めします。 ユーザーフォームが起動できなくなっても責任はとれません。 エクセルは2000 です。

  • VBAでマルチページの表示

    エクセル2002使用です。 ユーザーフォーム(オブジェクト名:UserForm1)に、マルチページ(オブジェクト名:page1)を配置してフォームを作成しました。 Sheet1にコマンドボタンを貼り付け、コマンドボタンをクリックして、標準モジュールを呼び出し、マルチページを標準モジュールから呼び出せるようにしたいのですがうまくいきません。 ’Sheet1 Private Sub CommandButton1_Click() Call フォーム表示 End Sub ’標準モジュール Sub フォーム表示() UserForm1.Show ’?ここのコードをいろいろ試したのですがわかりません。 End Sub この他 UserForm1.ShowPages "page1" とか 変数を入れてみたりしたのですが、うまくいきません。 すいませんが、よろしくお願いします。

  • エクセルマクロユーザーフォームのtxtbox値を標準モジュールに保持

    宜しくお願いします。 ユーザーフォームのtxtbox値を標準モジュールに渡してマクロを実行 るのですが、一度値をセットしたら20~30回変更が無いので標準モジュール のみショートカットで実行したいのですが値を保持してくれません。 何か良い方法は無いのでしょうか。? 'フォーム起動 Sub フォーム() UserForm1.Show End Sub +++++++++++++++++++++++++++ Private Sub CommandButton1_Click() Call モジュール '標準モジュールを呼ぶ Unload UserForm1 ++++++++++++++++++++++++++ モジュール内 Static ufX As Byte ufX = UserForm1.XXX.Text 'ufXの値を保持したい。

  • UserFormから標準モジュールのIEを制御

    VBAで、標準モジュールにて呼び出したIEオブジェクトをUserForm上から 制御する方法があればご教授願います。 Sub SampleModule() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp" UserForm1.Show ~~~~~~~~~~ Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Module1.SampleModule.objIE.Navigate "http://www.google.co.jp" ↑こういう感じの解をイメージしてます。 End Sub つまり、標準モジュールでセットしたオブジェクトを、呼び出した フォーム上から参照したいわけです。宜しくお願いします。

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

    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

  • アクセスからエクセルのUserForm1を表示させたい

    オフィス2003です。 アクセスのフォーム上にコマンドボタンを置き、 クリックイベントでエクセル上に作成してある UserForm1を表示させたいです。 案の定 Sub CB_Click() Excel.UserForm1.Show End Sub ではだめでした。 どういう方法がありますか? よろしくお願いします。

  • UserForm1.Showノトコロデエラーニナ

    Excel2013でプログラムしていますが、 Thisworkbookのところで Option Explicit Private Sub Workbook_Open() UserForm1.Show End Sub と、プログラミングするとUserForm1.Showのところでエラーになります。 どうしてでしょうか?

  • UserForm1.Showでエラーになります。

    Thisworkbookのところで Option Explicit Private Sub Workbook_Open() UserForm1.Show End Sub と記述するとUserForm1.Showでエラーになります。 どうすればよいでしょうか。 Excel2013で開発しています。

  • ファイルを開くと同時にユーザフォームを表示させたい

    Excelでファイルを開いたとき、自動的にユーザフォームを表示させるにはどのようにするのでしょう。下のコードを標準モジュールに書きました。「オブジェクトが必要です」のエラーメッセージが出てしまいます。 何を変えればいいのかお教えください。(Excel2002) Sub Auto_Open() UserForm1.Show End Sub

専門家に質問してみよう