VBAから複数のバッチファイルを実行する際に、1つの処理が終了するまで次の処理を待機させる方法について
こんにちは。VBA初心者です。
Shell関数を使って複数のバッチを連続して実行するプログラムを書きたいのですが、前のバッチ処理が終了する前に次のバッチが実行されてしまいエラーになってしまいます。
1つのバッチ処理が終了するまで、次の処理を待機させるようなことは可能でしょうか。
具体的には、B列に「test_01.txt」「test_02.txt」... といったファイル名が入力されていて、隣のA列に何らかの文字/記号があった場合は、指定されたバッチ(ファイル名.bat)が実行されるということをやりたいと考えています。
以下のようなプログラムを書いてみましたが、実行するバッチが複数になるとうまくいきせん。
どうしたら問題を回避できるか、ご教示いただけないでしょうか。
よろしくお願いします。
Sub バッチを実行()
i = 7 'リストの開始行
Const myPath As String = "D:\sample_batch\"
Const endPath As String = ".bat"
For i = 7 To 200 '7行目から200行目まで実行
If Cells(i, 1).Value <> "" Then
Shell (myPath & Cells(i, 2).Value & endPath)
End If
Next
End Sub
No.4ベストアンサー
- 回答日時:
確かに。
。。andy_kunさんのおっしゃるように「"」の付け方が怪しかったですね。バッチファイルまでのパスにスペースが無いならandy_kunさんの回答通りで。
ある(かもしれない)なら
objWShell.Run """" & myPath & Cells(i, 2).Value & endPath & """", 1, True
で。
ただ、私の場合
実行時エラー'91' オブジェクト変数または With ブロック変数が設定されていません。
じゃなくてオートメーションエラーになりましたが。。。
この回答への補足
ありがとうございます!
教えていただいた方法でとりあえずエラーは回避できました。
しかし、処理がループにならずに 1 回で終了してしまいます。
そこで、WScript.Shellを1回ごとに初期化する必要があるのかと思い、以下の例のように「objWShell = null」や「Set objWShell = Nothing」などを挿入してみたのですが、動作に変化がありません。
実行したプログラムの終了コードを参照するのに別途何かコードがいるのでしょうか。
(それとも、バッチの内容が他のエクセルシートとサーバの通信に関するもので、処理に時間がかかるのが原因か??? ※なぜ、一旦バッチを経由してエクセルシートの処理をするのか…というのは聞かないでください。ちょっと、事情があるのです)
Sub バッチを実行()
Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
Dim i As Integer
i = 7 'リストの開始行
Const myPath As String = "D:\20101006_test\"
Const endPath As String = ".bat"
For i = 7 To 200 '7行目から200行目まで実行
If Cells(i, 1).Value <> "" Then
MsgBox (Cells(i, 2).Value & " をコンバートします。")
objWShell.Run myPath & Cells(i, 2).Value & endPath, 1, True
End If
Set objWShell = Nothing
Next
End Sub
マッチポンプですみません。
objWShell.Run myPath & Cells(i, 2).Value & endPath, 1, True
の次に
Workbooks("ブック名").Worksheets("シート名").Activate
を挿入して、アクティブなブック(シート)をVBAを実行している方に戻したらOKでした。
No.1
- 回答日時:
Shell関数は非同期ですので、
代わりに WScript.Shellオブジェクトの Runメソッドを使いましょう。
この回答への補足
ご回答ありがとうございます。
WScript.Shellというものがあるんですね。VBEのヘルプを見ても載っていませんでしたが、WEBで調べたら使い方が書いてありました。
そこで、プログラムを以下のように変更してみたのですが、実行すると「コンパイルエラー:Sub, Function, またはproperty が必要です。」となってしまいます。
どこがいけないのかご指摘いただけないでしょうか。
(正直に申し上げて、エラーの意味が分かりません)
Sub バッチを実行()
Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
Dim i As Integer
i = 7 'リストの開始行
Const myPath As String = "D:\test_path\"
Const endPath As String = ".bat"
For i = 7 To 200 '7行目から200行目まで実行
If Cells(i, 1).Value <> "" Then
MsgBox (Cells(i, 2).Value & " をコンバートします。")
objWShell "myPath & Cells(i, 2).Value & endPath", 1, True
End If
Next
End Sub
スミマセン。補足では「.Run」が抜けていました。
objWShell.Run "myPath & Cells(i, 2).Value & endPath", 1, True
としたところ、「実行時エラー'91' オブジェクト変数または With ブロック変数が設定されていません。」となってしまいました。
謎です。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
【お題】引っかけ問題(締め切り10月27日(日)23時)
【大喜利】 「日本で一番高い山は富士山……ですが!」から始まった、それは当てられるわけ無いだろ!と思ったクイズの問題
-
【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
【お題】 ・買ったばかりの自転車を分解してひと言
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
ExcelVBAで戻り値を返すには
その他(プログラミング・Web制作)
-
バッチファイルでEXCELを起動し、マクロ処理の完了を検出する方法
その他(プログラミング・Web制作)
-
excel vbaから実行するexe実行の黒い画面の非表示
Visual Basic(VBA)
-
-
4
VBAでパワーシェルを実行したいのですが、なかなかうまく出来ず、有識者の知識をお借りさせてください。
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
これってパソコンの最適化が完...
-
ネットワーク名が見つかりません
-
三菱ラダーについて教えて下さい。
-
16進数の変換処理
-
シェルからCで作った実行ファイ...
-
[teraterm] waitコマンドで停止...
-
Excel VBA ステップインが途中...
-
Excel(エクセル) VBA プロシー...
-
ホームページのリンクからプロ...
-
VBscriptが起動しない?
-
MinGW,msysでCスクリプトの実行
-
Windows System32 Security Hea...
-
exeファイルを実行するとコマン...
-
NASに移したBATファイルからセ...
-
大量のフォルダからひとつのフ...
-
バッチでテキストファイルから...
-
コマンドプロンプトの「%1」と...
-
iPhoneでXMLファイルを開くには...
-
binファイルを解凍したいの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
exeファイルを実行するとコマン...
-
[teraterm] waitコマンドで停止...
-
これってパソコンの最適化が完...
-
VBscriptが起動しない?
-
バッチファイルの内容を表示さ...
-
「読み取りと実行」と「読み取...
-
ネットワーク名が見つかりません
-
PDFファイルを開き、印刷し、閉...
-
エクセル フォルダの画像を画...
-
VScodeのエラー解決法 Pythonの...
-
【VB.NET】exeを実行すると「発...
-
バッチファイルが不正終了して...
-
pythonスクリプトを管理者権限...
-
Excel(エクセル) VBA プロシー...
-
Excel VBA ステップインが途中...
-
NASに移したBATファイルからセ...
-
複数のbatファイルを自動実行し...
-
16進数の変換処理
-
VBScriptでコマンドプロンプト...
おすすめ情報