VBA初心者です。
タイトルの通りですが、例えばサブルーチン(1)の途中でユーザーフォーム(1)をモードレス表示している間、処理を止めることは可能でしょうか?
サブルーチン(1)を、ユーザーフォーム(1)を表示する前後に分割して、ユーザーフォーム(1)を閉じた時にサブルーチン(1-後半)を呼び出すことも考えたのですが・・・サブルーチン(1-前半)を別のサブルーチン(2)から呼び出した場合に、サブルーチン(1-前半)をEnd Subした時点で、サブルーチン(2)が進行してしまいます。
分かり難い質問で申し訳ありませんが、皆様の知恵をお貸しください。よろしくお願いします。
No.5ベストアンサー
- 回答日時:
>コードを解説していただけないでしょうか?
どこらへんが、わからないんでしょうか?
>UserForm1.Show (vbModeless)
はもともとやっておられるから
>Do While form
>dummy = DoEvents()
>Loop
ですか?
Do While ~ Loop は、条件が成立している間ループするということです。
この場合の条件は「form」ですが、これは、Boolean ですので、
True と False の値をとります。
True は、条件が成立しているということを表します。
つまり、form の値がTrue から False に変化するまでループを実行するということです。
DoEvents 関数は、OSにたまっている処理を実行させる処理をします。
単純に、
Do While True
'処理は何もない
Loop
とかすると、ものすごい勢いでループをして、他のプログラムが何かを処理する機会が与えられないので他のプログラムは動作できなくなります。そういう場合に、他のプログラムに対して処理する機会を与える(OSがやります)ことができます。
Dummy は、DoEventsが返す値はこの場合、別に必要ないですが、関数を関数形で呼び出す場合には、何かに代入する形にしてやる必要があります。
手続きではなくて関数を呼び出しているということをはっきりさせるためにそのようにしています。(他の人ならそのようには書かないかもしれません、そういうのは趣味で分かれる範疇です)
>どこらへんが、わからないんでしょうか?
Do Loopについて
Do While form=True
と言う記述方法しか知りませんでした。また、DoEventsについても、初めて知りました。
長い間おつきあい頂き、本当にありがとうございました。感謝です。
No.3
- 回答日時:
>Do Loopなどを使って処理を中断することも試してみたのですが、うまくいきませんでした。
ループで待つのは、あんまり良いとは思えませんが、もちろんできますよ。
例えば、呼び出し側を
大域変数を
Public form As Boolean
のように準備して
Public Sub test()
Dim dummy As Integer
MsgBox "前処理"
form = True 'フォームを呼び出す前にセット
UserForm1.Show (vbModeless)
Do While form
dummy = DoEvents()
Loop
MsgBox "後処理"
End Sub
のようにしてフォームの側で大域変数の状態を変更するまで待てます。
フォームの側では、
Private Sub CommandButton1_Click()
Unload UserForm1
End Sub
Private Sub UserForm_Terminate()
form = False
End Sub
のようにアンロードされる時にFalse にセットします。
セットと解除のタイミングについては、
フォームのinitialize やactivate, deactivate (アンロードでなくHide の場合とか)でしてもいいと思います。
アドバイス通りに記述してみたところ、処理は止まったのですが、エクセルのセルへの入力などはおこなえないようですね。度々のお返事、本当にありがとうございます。
No.1
- 回答日時:
後半処理部分を
ユーザーフォームが閉じる時のイベント処理に移したらどうでしょうか
Private Sub UserForm_Terminate()
'後半部分処理
End Sub
お返事ありがとうございます。アドバイスをまだ試していないのですが・・・
前半処理部分を別のサブルーチンから呼び出した場合、後半処理部分をユーザーフォームが閉じる時のイベント処理に移しても、別のサブルーチンが進行してしまうような気がするのですが?
Sub 別Sub()
↓
前半→→→→→Sub 前半()
↓
UserForm1.Show vbModeless→→→後半
↓←←←←←←End Sub
↓
↓(ここが止まらない)
↓
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Perl perlのrequireの動き方についての質問 2 2022/10/30 17:27
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Perl perlの構文でカンマの意味が分からない 2 2022/10/30 01:53
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- 情報処理技術者・Microsoft認定資格 (パイプライン処理)基本情報技術者の演習問題について 1 2023/03/11 17:47
- その他(プログラミング・Web制作) 外付ディスプレイで AutoHotkey の MouseMove コマンドを実行するとマウスカーソル 1 2023/03/06 00:04
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
-
4
Excel ユーザーフォームをモードレスで表示後
Visual Basic(VBA)
-
5
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
6
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
7
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
8
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
9
VBAでユーザーフォームが自動的に消える
Visual Basic(VBA)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
UserForm1.Showでエラーになります。
工学
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
14
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
15
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
16
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
17
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
18
Vba Userformを前面に出すについて
Access(アクセス)
-
19
モードレスでユーザーフォームが開け(表示)ません。
Visual Basic(VBA)
-
20
Excel-VBA>コントロールをグレイアウトするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理のフローチャートの記...
-
perlの構文でカンマの意味が分...
-
オフコン(富士通Kシリーズ)...
-
サブルーチンを認識しません。
-
初歩的な質問なのですが、サブ...
-
fortran95実行エラー
-
ユーザー定義関数に#NAME?が返...
-
Excel VBAでリンク切れをチェッ...
-
VBでグローバル変数を宣言するには
-
エクセルVBAでシートモジュール...
-
Excel VBA 『Call』で呼び出す...
-
VBAで別モジュールへの変数の受...
-
モジュールとクラスの違いって...
-
クラスモジュールについて
-
VBSがコンパイルエラーになりま...
-
「デバイスは PRN を初期化でき...
-
crontab での実行結果が違う
-
CDO.Messageを使ったVBScript
-
'Range'メソッドは失敗しました
-
Oracleのデータベースに接続で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
モジュールとサブルーチン
-
オフコン(富士通Kシリーズ)...
-
ExcelVBA AddinでOnAction
-
COBOLで、Shellを起動するには?
-
VBAで2重のDoLoop関数から抜け...
-
ACCESSのVBAでPrivate Sub ~en...
-
GOSUB命令とは
-
プログラムの「生産性」について
-
”:”がいっぱいの文について。
-
初心者です。Perlではどんな時...
-
初歩的な質問なのですが、サブ...
-
サブルーチンを認識しません。
-
【Perl】サブルーチンから多次...
-
サブルーチンに引数を2つ以上...
-
プログラムの可読性が悪いです...
-
サブルーチンやif分以外での中括弧
-
Excel2000VBA 複数のテキストボ...
-
perlの構文でカンマの意味が分...
おすすめ情報