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も見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
【お題】 ・このサンタクロースは偽物だと気付いた理由とは?
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
Excel ユーザーフォームをモードレスで表示後
Visual Basic(VBA)
-
5
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
6
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
7
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
8
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
9
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
10
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
13
UserForm1.Showでエラーになります。
工学
-
14
VBAでユーザーフォームが自動的に消える
Visual Basic(VBA)
-
15
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
16
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
17
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
18
モードレスでユーザーフォームが開け(表示)ません。
Visual Basic(VBA)
-
19
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
20
VBAでの一時停止と再開の方法
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
GOSUB命令とは
-
初心者です。Perlではどんな時...
-
VBAで2重のDoLoop関数から抜け...
-
COBOLで、Shellを起動するには?
-
Attempt to free unreferenced ...
-
サブルーチンを認識しません。
-
Excel VBAでリンク切れをチェッ...
-
perlをバージョンアップしたら...
-
VBAで別モジュールへの変数の受...
-
Excelで時刻になったら知らせて...
-
Excel VBA 『Call』で呼び出す...
-
標準モジュールを削除したい。(...
-
VBSがコンパイルエラーになりま...
-
VBAで旧字体を異字体に一括で変...
-
erf(x)とerfc(x)のカタカナ読み...
-
エクセルVBA クラスモジュール...
-
VBでグローバル変数を宣言するには
-
LCD ディスプレイを Raspberry ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
モジュールとサブルーチン
-
オフコン(富士通Kシリーズ)...
-
COBOLで、Shellを起動するには?
-
配列と互換性のない型の要素に...
-
サブルーチンを認識しません。
-
初心者です。Perlではどんな時...
-
ExcelVBA AddinでOnAction
-
”:”がいっぱいの文について。
-
fortran95実行エラー
-
ACCESSのVBAでPrivate Sub ~en...
-
Excel2000VBA 複数のテキストボ...
-
perlの構文でカンマの意味が分...
-
プログラムの「生産性」について
-
初歩的な質問なのですが、サブ...
-
Attempt to free unreferenced ...
-
cobol サブルーチンのlink
-
GOSUB命令とは
-
Excel VBAから利用できるフリー...
おすすめ情報