以下のようにVBAコードを書いたらエラーは出ませんが、コマンドプロンプトが1瞬で消えて最後のメッセージが出力されてしまいます。コマンドプロンプトは処理が終了するまで全部表示させたいです。
それからできれば4つのバッチファイルが全て終了してから最後のメッセージを出したいです。
そのためにはどうすればいいか教えてほしいです。
どなたか詳しい方よろしくお願いします。
Sub バッチファイル複数実行()
'csvtest.bat, csvtest1, csvtest2, csvtest3 複数のバッチファイル
Dim batFileName, batFileName1, batFileName2, batFileName3 As String
'シェルオブジェクトの作成
Dim ShellObject As Object
batFileName = "C:\Users\Desktop\work\データ\csvtest.bat"
Set ShellObject = CreateObject("WScript.Shell")
'シェルの並列実行
ShellObject.Run batFileName, 1, True '1にするとコマンドプロンプトを通常表示 True だと同期(バッチファイルの処理が終了するまで止まる)
'ファイルの有無をチェック data1.csvからチェック
If Dir("C:\Users\Desktop\work\データ\data1.csv") <> "" Then
batFileName1 = "C:\Users\Desktop\work\データ\csvtest1.bat"
ShellObject.Run batFileName1, 1, True
Else
MsgBox "実行ファイルは1つです。"
End If
If Dir("C:\Users\Desktop\work\データ\data2.csv") <> "" Then
batFileName2 = "C:\Users\Desktop\work\データ\csvtest2.bat"
ShellObject.Run batFileName2, 1, True
Else
MsgBox "実行ファイルは2つです。"
End If
If Dir("C:\Users\Desktop\work\データ\data3.csv") <> "" Then
batFileName3 = "C:\Users\Desktop\work\データ\csvtest3.bat"
ShellObject.Run batFileName3, 1, True
Else
MsgBox "実行ファイルは3つです。"
End If
MsgBox "全て終了しました。", vbInformation
End Sub
No.1
- 回答日時:
平行処理じゃなくて、それ、シーケンス処理だよね。
・・・
バッチファイルの最後に
pause
コマンドを追加して一時停止させてみてはいかがですか。
(開いているファイルはすべて閉じる処理をしておきましょう)
で、タイミングを見て最後にすべてのコマンドプロンプトウインドウを強制的に閉じる。
回答ありがとうございます。
シーケンス処理というのが何かわかりませんが、4つ同時に実行したいです。
1つのバッチ処理に1時間くらいかかるので終わるのを待っていられない感じです。
それから以下のように4か所変更してみましたが、やはり1瞬で閉じてメッセージが出ました。
ShellObject.Run batFileName2 & pause, 1, True
No.2ベストアンサー
- 回答日時:
<バッチが終了した後もプロンプトのウインドウを閉じずにおいておく方法>
>ShellObject.Run batFileName2 & pause, 1, True
このようにVBAのコードにpause を追加するのではなく、
バッチファイル(.bat)の中のコードの末尾に pause を挿入します。
保存してバッチファイルを実行すると、pause より上の処理が終わってから
「続行するには何かキーを押してください...」とプロンプトのウインドウに表示されます。
試しに、下の2行をメモ帳に貼り付けてtest.batなどと名前をつけて保存して実行してみてください。3秒間してから「続行するには...」が表示されます。
timeout /nobreak 3
pause
<複数のバッチファイルを同時に実行する方法>
いわゆる非同期処理です。
ShellObject.Run batFileName2, 1, False
複数のバッチファイルを同時に実行する場合は、最後のパラメーターはFalseにするか省略してください。Trueだと、VBAのプログラムは1つバッチを実行し、実行が終わったら次のバッチを実行し、というふうにバッチを順番にひとつずつ実行してしまいます。
<全てのバッチファイルの実行が終わったら知らせる>
非同期処理の場合、バッチファイルの実行が終わるより先にVBAのプログラムの方が終了してしまいます。また、バッチファイルに書かれてる処理を全て終わらせても、最後にpause で中断している限り、OSはそのプロセスは終了せずにずっと実行中だと判断するので、Win32APIを使ってプロセスやハンドルをポーリング(ループの一種。一定の時間間隔である状態を繰り返し確認すること)するという手も使えません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
コマンドプロンプト実行後に画面を閉じない方法
Visual Basic(VBA)
-
VBAから複数のバッチファイルを実行する際に、1つの処理が終了するまで
Visual Basic(VBA)
-
VBAのコマンドプロンプトでpauseを使う方法
Visual Basic(VBA)
-
-
4
複数のbatファイルを自動実行したい
その他(プログラミング・Web制作)
-
5
excel vbaから実行するexe実行の黒い画面の非表示
Visual Basic(VBA)
-
6
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
7
テキストファイルから最終行の抽出
Windows Me・NT・2000
-
8
1つのVBAコードをすべてのコアを使って実行させたい
PowerPoint(パワーポイント)
-
9
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
10
バッチファイル、順番を指定して複数のプログラムを起動。
その他(プログラミング・Web制作)
-
11
VBAでEXEファイルを動かす方法について
Visual Basic(VBA)
-
12
VBA でshell関数を使ってコマンドプロンプト立ち上げてコマンドの入力方法
Visual Basic(VBA)
-
13
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
14
オブジェクト型の変数にフォームを入れたい
Visual Basic(VBA)
-
15
ExcelVBAにてアプリをタスクマネージャーから強制終了させたいのですが
Visual Basic(VBA)
-
16
PDFファイルをコピーしてエクセルブックにはりつけるVBA
Excel(エクセル)
-
17
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
18
VBA+VBSによる別インスタンスBookOpen時のVBSエラーに関して
Excel(エクセル)
-
19
2画面表示でのVBAのボタン押下後のform表示の位置
Excel(エクセル)
-
20
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
Excel(エクセル) VBA プロシー...
-
VBscriptが起動しない?
-
「読み取りと実行」と「読み取...
-
exeファイルを実行するとコマン...
-
VB.NETでのDOSコマンドを実行に...
-
バッチファイルの内容を表示さ...
-
VBScriptでコマンドプロンプト...
-
[teraterm] waitコマンドで停止...
-
バッチファイルが不正終了して...
-
16進数の変換処理
-
VBS実行時にコマンドプロンプト...
-
ネットワーク名が見つかりません
-
VBAのコマンドプロンプトでpaus...
-
フォルダを閉じる
-
Excel VBA ステップインが途中...
-
NASに移したBATファイルからセ...
-
メッセージを他のPCに出したい
-
【VB.NET】exeを実行すると「発...
-
pythonでexeファイルが作成でき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
「読み取りと実行」と「読み取...
-
exeファイルを実行するとコマン...
-
VBscriptが起動しない?
-
バッチファイルの内容を表示さ...
-
Excel VBA ステップインが途中...
-
エクセル フォルダの画像を画...
-
バッチファイルが不正終了して...
-
PDFファイルを開き、印刷し、閉...
-
複数のbatファイルを自動実行し...
-
[teraterm] waitコマンドで停止...
-
VBScriptでコマンドプロンプト...
-
ネットワーク名が見つかりません
-
Excel(エクセル) VBA プロシー...
-
Access の VBA 実行中に他の操...
-
VB.NETでのDOSコマンドを実行に...
-
Excelのセルの内容をコマンドプ...
-
VBS実行時にコマンドプロンプト...
-
VBA 既に開いているBookに継続...
-
メッセージを他のPCに出したい
おすすめ情報