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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】大変な警告
【大喜利】「今このパソコンは大変危険な状態です」という警告メッセージを無視してパソコンを開いたら、こんなことが起こった
-
【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
【お題】 『寿司』がテーマの本のタイトルを考えてください
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
テレビやラジオに出たことがある人、いますか?
テレビやラジオに取材されたり、ゲスト出演したことある方いますか?
-
集中するためにやっていること
家で仕事をしているのですが、布団をはじめ誘惑だらけでなかなか集中できません。
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
-
4
Excel ユーザーフォームをモードレスで表示後
Visual Basic(VBA)
-
5
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
6
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
7
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
8
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
9
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
10
UserForm1.Showでエラーになります。
工学
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
13
VBAでユーザーフォームが自動的に消える
Visual Basic(VBA)
-
14
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
15
Excel-VBA>コントロールをグレイアウトするには?
Excel(エクセル)
-
16
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
17
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
18
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
19
[Excel VBA]コマンドボタンの入力待ち方法
Visual Basic(VBA)
-
20
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理のフローチャートの記...
-
smallbasic について教えてくだ...
-
配列と互換性のない型の要素に...
-
プログラムの可読性が悪いです...
-
GOSUB命令とは
-
Excel VBAで、ユーザーフォー...
-
オフコン(富士通Kシリーズ)...
-
Excel VBAで、ユーザーフォーム...
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数をEXCELに常駐...
-
LCD ディスプレイを Raspberry ...
-
ユーザー定義関数に#NAME?が返...
-
VBSがコンパイルエラーになりま...
-
VBAで別モジュールへの変数の受...
-
awkの処理速度を改善したい
-
Access VBA標準モジュールにつ...
-
エクセルVBAで標準モジュー...
-
Excelで時刻になったら知らせて...
-
Excel VBA 定義されたプロージ...
-
Excel VBA 『Call』で呼び出す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
モジュールとサブルーチン
-
COBOLで、Shellを起動するには?
-
オフコン(富士通Kシリーズ)...
-
”:”がいっぱいの文について。
-
GOSUB命令とは
-
ACCESSのVBAでPrivate Sub ~en...
-
VBAで2重のDoLoop関数から抜け...
-
ExcelVBA AddinでOnAction
-
サブルーチンを認識しません。
-
サブルーチンやif分以外での中括弧
-
perlの構文でカンマの意味が分...
-
サブルーチンに引数を2つ以上...
-
配列と互換性のない型の要素に...
-
Perlのスレッド?
-
cobol サブルーチンのlink
-
プログラムの「生産性」について
-
初歩的な質問なのですが、サブ...
-
smallbasic について教えてくだ...
おすすめ情報