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

ユーザーフォームを勉強し始めました。


標準モジュールに、

sub oya()
userform1.show
end sub

として、userform1を表示しています。
そしてuserform1で、諸々の設定をしています。

oyaでは、この設定を使って作業をします。


ここで質問です。
oyaの作業は、userform1で設定した内容を使うため、
処理が終わるのを待つ必要がありますが、
その書き方が分かりません。

今現在は、単純にuserform1.showの下に処理を書いているので、
設定する前に空欄を使うような状況になってしまっています。
sub oya()
userform1.show
 処理ロジック
end sub

分かりにくいでしょうが、
宜しくご指導下さい。

A 回答 (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するような方法も利用できます。

この回答への補足

色々有り難うございました。
以下で解決しました。

Do While userform1.visible
DoEvents
Loop

お世話になりました。

補足日時:2014/07/10 06:10
    • good
    • 0
この回答へのお礼

お世話になります。

本プログラムはユーザーが自分のデータを入力することで、
結果が返る。という代物です。

そして本プログラムの処理部分をoyaと称してコードしています。

これまでは、ユーザーからの情報をinputboxで受けていたのですが、
質問に書いたように、userformを勉強しようと思い、
inputbox部分をuserform1に置き換えたということです。

inputboxなら、上から下に制御が流れますので問題なかったのですが、
userform1にしたら、showしたと同時に制御が流れてしまうので、
useroform1による情報の入力が済んだことを確認して、
後続処理を開始したいと。

そのため、同期を取りたいと質問しました。


ズバリ、分からないなりにイメージですが

Do While userform1処理中
DoEvents
Loop

のようなことがやりたいのです。

userform1がunloadされた情報が調べられれば解決ですが。

分かりにくい説明で恐縮です。
引き続き宜しくお願いします。

お礼日時:2014/07/10 05:08

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