ここから本文です

VBAのご質問です。例えば処理がかかるループ の時などにプ添付画像のようなプログ...

sae********さん

2019/8/1607:42:39

VBAのご質問です。例えば処理がかかるループ
の時などにプ添付画像のようなプログレスバーのユーザーフォームを表示したいと思います。 そのユーザーフォームにはコマンドボタン(キャンセルボ

タン)も設置しそのボタンを押すと、処理が中断するようにしたいです。
時間のかかる処理→プログレスバー表示→処理を中断したい時コマンドボタンを押す→処理中止のよう感じです。色々ネットで調べプログレスバーを表示させるユーザーフォームはモードレスで開くと解り、モードレス開くと進捗状況によってが上手くDoeventsで更新され四角(ラベル)に色がついて行きました。
ただ、中断したい時にコマンドボタンを押してもモードレスで開いているからなのかPrivate Sub CommandButton2_Click()のプロシージャに処理が移らず処理が中断されません。モードレス開いてもコマンドボタンを押したらPrivate Sub CommandButton2_Click()のプロシージャへ流れが移るようにするためにはどうしたらいいのでしょうか
宜しくお願い致します。

プロシージャ,コマンドボタン,モードレス,プログレスバー,ユーザーフォーム,Dim i As Long,End Sub

閲覧数:
62
回答数:
2

違反報告

ベストアンサーに選ばれた回答

set********さん

2019/8/1818:10:55

ア)先ず、全く新しいExcelBookに、下の図のようなUserFormとProgressBarとCommandButtonを作って下さい。

イ)次に、標準モジュールに下記の構文をコピペして下さい。
Public judgeStop As Boolean
Sub Test1()
Dim i As Long, m As Long
UserForm1.Show vbModeless
End Sub

ウ)次に、フォームモジュールに下記の構文をコピペして下さい。
Private Sub CommandButton1_Click()
Dim i As Long, m As Long
With UserForm1.ProgressBar1
.Min = 0
.Max = 200
.Value = 0
.Scrolling = 0 '1 '滑らかにスクロール
End With
judgeStop = False
For i = 1 To 200000
m = i Mod 1000
If m = 0 Then
Range("A" & i / 1000) = i / 1000
UserForm1.ProgressBar1.Value = i / 1000
End If
DoEvents
If judgeStop = True Then Exit Sub
Next i
End Sub

Private Sub CommandButton2_Click()
judgeStop = True
End Sub

以上で、Test1マクロを実行し、UserFormを表示させ、CommandButton1でループ処理をさせ、ProgressBarが途中まで進んだら、CommandButton2で処理を中止してみて下さい。
なお、A列に順に数値が入力されていきます。

ア)先ず、全く新しいExcelBookに、下の図のようなUserFormとProgressBarとCommandB...

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

Qch******さん

2019/8/1611:52:20

具体的な構造が分かりませんが、
「モードレス」なUserFormを使う場合も考え方は同じです。このときは、UserFormの呼出元(標準モジュールなど)と、UserForm内のプロシージャ(CommandButton2_Clickなど)の両方で参照できる広域変数が必要ですので、変数flagは標準モジュール側で宣言します。

詳しくはこちらでご確認ください。
http://officetanaka.net/excel/vba/tips/tips23.htm

フラグなどを立てて置き、ロープ内にフラグで強制離脱なども考えられます
http://officetanaka.net/excel/vba/tips/tips63.htm

参考として
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user...
再開を想定するなら、Stop ステートメントで止め判断をさせるかたちですかね。

的外れかもしれませんが。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる