Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1315 / 2272 ツリー ←次へ | 前へ→

【7703】開いたフォームから戻ってくるまでVBAをとめる方法? nik 06/4/17(月) 20:57 質問[未読]
【7706】Re:開いたフォームから戻ってくるまでVB... 小僧 06/4/18(火) 9:49 発言[未読]
【7707】Re:開いたフォームから戻ってくるまでVB... 丹後のトムキャット 06/4/18(火) 17:27 回答[未読]
【7708】Re:開いたフォームから戻ってくるまでVBA... たぬき 06/4/18(火) 17:48 発言[未読]
【7709】Re:開いたフォームから戻ってくるまでVBA... nik 06/4/18(火) 18:44 お礼[未読]
【7760】Re:開いたフォームから戻ってくるまでVBA... ハト 06/4/25(火) 18:04 回答[未読]

【7703】開いたフォームから戻ってくるまでVBA...
質問  nik  - 06/4/17(月) 20:57 -

引用なし
パスワード
   かなり困っています。

あるフォームでのイベントプロシージャから別のフォームを開き、そのフォームを閉じて帰ってくるまで、呼び出し元のプロシージャのVBAの実行を止めておくことって可能なんでしょうか?

たとえば、

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
Public NAME As String

Form_A:
Private Sub txt_1_click()

  NAME = ""
  Docmd.OpenForm "Form_B" ・・・1.
                    ←←←←←A
  txt_1.Value = NAME   ・・・3.

End Sub

Form_B:
Private Sub btn_INPUT_Click()

  NAME = InputBox("名前をいれてください。") ・・・2.
  Docmd.OpenForm "Form_A"
  '
  Docmd.Close acForm,"Form_B"

End Sub

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

上の例で言えば、普通1.→2.と行き、インプットボックスが表示されますが、
そのまま3.が実行されて、Form_A のtxt_1 には空も度列が表示されてしまい
ます。
なんとういうか、私的には、フォーカスかアクティブ?かなにかわからない
けど、Form_Bに移って、Form_Bが閉じられて再びForm_Aに戻ってくるまで、
Aで待機しててくれる方法はないのかの調べてるんですが皆目わかりません。

どなたがお助けください。
  

【7706】Re:開いたフォームから戻ってくるまでVB...
発言  小僧  - 06/4/18(火) 9:49 -

引用なし
パスワード
   ▼nik さん:
おはようございます。

>かなり困っています。

かなり困っているのは解りますが、
ルールを守らないのはもっと困り者だと思いますよ。

あちらの掲示板のルールより
http://www.accessclub.jp/akira/025.html
複数のBBSに同一の投稿をすることは厳禁です。
(これをマルチポストと呼びます)

どちらかに一本化しましょうね。

【7707】Re:開いたフォームから戻ってくるまでVB...
回答  丹後のトムキャット  - 06/4/18(火) 17:27 -

引用なし
パスワード
   共有変数を作成する、例の場合は「Pub_Flg」
共通変数用モジュール
Public Pub_Flg As Boolean

>〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
>Public NAME As String
>
>Form_A:
>Private Sub txt_1_click()
>
>  NAME = ""
>  Docmd.OpenForm "Form_B" ・・・1.


    Pub_Flg = True
    Do Until Pub_検索中Flg = False
      '----- 検索画面が閉じるまでループ
      DoEvents
    Loop

>                    ←←←←←A
>  txt_1.Value = NAME   ・・・3.
>
>End Sub
>
>Form_B:
>Private Sub btn_INPUT_Click()
>
>  NAME = InputBox("名前をいれてください。") ・・・2.
>  Docmd.OpenForm "Form_A"
>  '

   Pub_Flg=False

>  Docmd.Close acForm,"Form_B"
>
>End Sub
>
>〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

上記の様にすれば、止まるはずです。
但し、同じ画面を幾つも開くようなシステム設計であれば
変数名に注意が必要です。

【7708】Re:開いたフォームから戻ってくるまでVB...
発言  たぬき  - 06/4/18(火) 17:48 -

引用なし
パスワード
   他にも

SysCmd(acSysCmdGetObjectState, acForm, "hoge")=0
を使ってフォームが閉じたか判断する方法

WaitForSingleObjectを使う方法などがあると思います。

【7709】Re:開いたフォームから戻ってくるまでVB...
お礼  nik  - 06/4/18(火) 18:44 -

引用なし
パスワード
   Do Events を使った手法は、また別の問題の解決のヒントにもなりました。
SysCmd 関係は、調べてみます。

ありがとうございます。

【7760】Re:開いたフォームから戻ってくるまでVB...
回答  ハト  - 06/4/25(火) 18:04 -

引用なし
パスワード
   ▼nik さん:
>かなり困っています。
>
>あるフォームでのイベントプロシージャから別のフォームを開き、そのフォームを閉じて帰ってくるまで、呼び出し元のプロシージャのVBAの実行を止めておくことって可能なんでしょうか?
>
>たとえば、
>
>〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
>Public NAME As String
>
>Form_A:
>Private Sub txt_1_click()
>
>  NAME = ""
>  Docmd.OpenForm "Form_B" ・・・1.
>                    ←←←←←A
>  txt_1.Value = NAME   ・・・3.
>
>End Sub
>
>Form_B:
>Private Sub btn_INPUT_Click()
>
>  NAME = InputBox("名前をいれてください。") ・・・2.
>  Docmd.OpenForm "Form_A"
>  '
>  Docmd.Close acForm,"Form_B"
>
>End Sub
>
>〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
>
>上の例で言えば、普通1.→2.と行き、インプットボックスが表示されますが、
>そのまま3.が実行されて、Form_A のtxt_1 には空も度列が表示されてしまい
>ます。
>なんとういうか、私的には、フォーカスかアクティブ?かなにかわからない
>けど、Form_Bに移って、Form_Bが閉じられて再びForm_Aに戻ってくるまで、
>Aで待機しててくれる方法はないのかの調べてるんですが皆目わかりません。
>
>どなたがお助けください。
>  

Form_Bのプロパティ
 ポップアップ
 作業ウィンドウ固定
を「はい」に設定し

  Docmd.OpenForm "Form_B", , , , ,acDialog

と変更して実行してみてください
これでForm_Bを閉じるまでForm_Aは待機するはずです

1315 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078228
(SS)C-BOARD v3.8 is Free