[[20190222160513]] 『VBAの一時中断→再開』(T19) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAの一時中断→再開』(T19)

お世話になります。

一つのマクロ内で処理を一時中断させ、別作業(シート編集や他アプリの操作)をした後に
マクロを再開させたいと考えています。
作業の流れとしては、以下となります。
マクロ実行→処理1→一時中断→別作業→再開→処理2→一時中断...

以下を検討しましたが、どれも今一な感じです。
1)MsgBoxで「OK」を押すまで待機状態にしておく
2)コード内に「Stop」を入れる
3)「Application.Wait」や「Sleep関数」を使う
今一な理由は、
1)は、この状態のままでは別作業ができません。
2)は、ブレークポイントと同じでVBE画面からの続行になり億劫です。
3)は、時間指定が必要で悩ましい。

できれば、エクセルからのボタン操作かデスクトップからのキー操作でマクロを再開できれば、と考えています。
ご助言をお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


必ず中断するのであれば処理1 処理2 ・・・ を全て別マクロにしてしまえばいいのでは?
一つのマクロ内でやる利点が見えてこないのだが
(名無) 2019/02/22(金) 16:14

マクロを中断してから作業、というのは、良くないように感じます。 Sleep系はスレッドを止めてしまいますし。
マクロを分けてはどうですか? 変数は複数マクロ間で共有できますよ。
(???) 2019/02/22(金) 16:14

ありがとうございます。
実は複数のマクロ作業(処理1、処理2..)を一つにできないか、というのが発端でして・・

複数のマクロは今はそれぞれ別ブックにあるのですが、都度そのブックを開いてマクロを実行しています。
共通するのは、ほとんどのケースでエクセル以外のアプリとデータのやりとりを「手動」ですることです。
(この部分が上述の「別作業」になります)

未だ構想が固まっているわけではないですが、各ブックを開く操作を一つのマクロに組み込んでマクロを
実行すれば作業効率が上がるのでは、というのが動機です。

方向性がマチガっていますかね..

(T19) 2019/02/22(金) 17:25


作業というのが別アプリで取得した数値を手入力で引っ張ってきてそれを作業ブックに反映させていくようなものであれば、
先駆けて必要なデータのみを収集して統括ブックに書き込む欄を作り、
それをマクロで各ブックに自動反映させていく方式のほうが作業効率は上がるのではないだろうか
(名無) 2019/02/22(金) 17:56

簡単操作での一時中断→再開の方法は「ない」、ということですね..

 >マクロを中断してから作業、というのは良くない・・
 >統括ブックに書き込む・・

を、参考にして再考したいと思います。

ありがとうございました。
(T19) 2019/02/23(土) 06:59


作業自体のマクロは既に作業ブック内で完成しているという話なので、
アドバイスとしては

「統括ブック」を一つ作り、

 別作業(反映させたい数値の調査・反映)
      ↓
〜〜〜〜マクロで自動化出来る範囲〜〜〜〜

1.「統括ブック」から「作業ブック」へ数値の反映をする処理

2.「作業ブック」内の既存のマクロを実行させる処理

3.戻り値を「統括ブック」に記載する処理

4.開いた「作業ブック」を閉じる処理

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
      ↓
 別作業(他アプリへ数値の反映)

上記を一連の作業として一つマクロを作成してしまえばそれで事足りるのではないかと思う
どんな構成が良いかは現状のファイル管理状況によって異なると思われるので、
ご参考までに
(名無) 2019/02/23(土) 09:40


名無さん、再々ありがとうございます。

統括ブックと作業ブック間のやり取りのコードを汎用化させれば、
他の作業ブックにも適用できそう..ですが今は思いつきません。

躓いたときはよろしくお願いします…
(T19) 2019/02/24(日) 08:49


参考サイトにある、DoEvents と UserForm を使用して何とかなるように思えてきたのですが、
これも「マクロを中断してからの作業(≒良くない)」に該当するものでしょうか?
(どちらも未経験で大いに不安ありです)

参考;http://officetanaka.net/excel/vba/tips/tips23.htm
(T19) 2019/02/26(火) 15:10


>これも「マクロを中断してからの作業(≒良くない)」に該当するものでしょうか?
そうです。

先の方法は無限ループで、ユーザーの操作を監視することで、一定の条件が整った時にVBAを実行する仕組みです。

ずっとVBAが回り続ける事になりますから、ユーザーが想定外の操作を行うことで起こりうる事象が予測できません。片っ端からエラーの原因となりそうな対処コードを書いていたらキリがないくらいです。

また条件を満たした時を自動で検知するのが非常に難しいのではないでしょうか。誤作動する可能性もありますよね。

少しでも怖いと感じるならう止めておきましょう。

>マクロ実行→処理1→一時中断→別作業→再開→処理2→一時中断...
きっと複数のウィンドウをまたぐので、マクロ実行のボタンの配置したシートが背面に行ってしまうため、続行方法に困っているのではないかとエスパーします。

対処法はいくらでもあります。

例えば最初のマクロを実行した時点でユーザーフォームを表示しておき、進捗に合わせてフォームにマクロ実行ボタンが追加(Visible=True)されていくなんて如何でしょう?
フォームなら少々邪魔ですが背面に送られてしまう心配はありません。

あとはリボンに追加するとか、コンテキストメニューに追加するとか、Windows.Addで窓を分割するとか、ショートカットキーに登録して続行するときはそのキーを押して貰うとかが思いつきます。
(ななし) 2019/02/26(火) 16:03


いろいろとありがとうございます。

ユーザーフォームを学習してみようと思います。
簡単ではなさそうですが(私には)..

これからもよろしくお願いします…
(T19) 2019/02/26(火) 17:19


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.