• 締切済み

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

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

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7941)
回答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