
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も見ています
-
Excel ユーザーフォームをモードレスで表示後
Visual Basic(VBA)
-
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
5
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
8
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
9
マクロを実行中に、msgbox を表示させたまま、ワークシートを上下左右に移動表示させたい。
Excel(エクセル)
-
10
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
11
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
12
メッセージボックスの非モーダル化について
Visual Basic(VBA)
-
13
VBAでユーザーフォームが自動的に消える
Visual Basic(VBA)
-
14
UserForm1.Showでエラーになります。
工学
-
15
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
16
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
17
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
18
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
-
19
Excel VBAで、ユーザーフォームの値を、モジュールで使用したい。
Visual Basic(VBA)
-
20
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
オフコン(富士通Kシリーズ)...
-
ExcelVBA AddinでOnAction
-
ACCESSのVBAでPrivate Sub ~en...
-
Excel VBA 定義されたプロージ...
-
ユーザー定義関数に#NAME?が返...
-
VBSがコンパイルエラーになりま...
-
エクセルVBAでシートモジュール...
-
VBAで旧字体を異字体に一括で変...
-
「デバイスは PRN を初期化でき...
-
Excel VBAで、ユーザーフォーム...
-
Perlで書いたプログラムをC言語...
-
教えて下さい。
-
perl 正規表現でエラー
-
Data::Dumperモジュールについて
-
VBA This Workbookモジュール...
-
acwzlibとは?
-
perlでマイクロソフトAccessのa...
-
VBAでoutlook365が起動しません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
モジュールとサブルーチン
-
オフコン(富士通Kシリーズ)...
-
COBOLで、Shellを起動するには?
-
配列と互換性のない型の要素に...
-
VBAで2重のDoLoop関数から抜け...
-
プログラムの「生産性」について
-
モジュール内でのサブルーチン...
-
ACCESSのVBAでPrivate Sub ~en...
-
ExcelVBA AddinでOnAction
-
VBAのサブルーチンとプロシージ...
-
サブルーチンやif分以外での中括弧
-
初歩的な質問なのですが、サブ...
-
エクセルVBAでサブルーチン...
-
Attempt to free unreferenced ...
-
GOSUB命令とは
-
フォートランのサブルーチンの...
-
”:”がいっぱいの文について。
-
初心者です。Perlではどんな時...
おすすめ情報