この記事では、Excelのマクロから引数をバッチファイルに渡して呼び出す方法についてご説明します。
【動画】Excelのマクロから引数をバッチファイルに渡して呼び出す実際の動き
本題に入る前に、まずはExcelのマクロから引数をバッチファイルに渡して呼び出す実際の動きについて、次のツイートをご覧ください。
VBAから、バッチファイルをパラメタ指定で実行してみました😀
バッチファイルに渡しているパラメタは、バッチファイル側でdirコマンドを実行する際のディレクトリを指定しています。なお、バッチファイルは同期実行しています😋#Excel#VBA#バッチファイル pic.twitter.com/OeOe0AjNVq
— まさ@Excel、VBA、マクロ(経験年数17年) (@masamasa9785) March 16, 2021
ツイート内の動画では、Excelのマクロから引数をバッチファイルに渡して呼び出しています。
VBA側から受け取った引数のディレクトリ名をもとに、そのディレクトリ内のファイル一覧をテキストファイルに書き出して生成しています。
Excelのマクロから引数をバッチファイルに渡して呼び出す方法
Excelのマクロから引数をバッチファイルに渡して呼び出すには、次の流れの通りにコードを書いていきます。
Excelのマクロのコードの例
'WshShellオブジェクト Dim obj As WshShell 'バッチファイル Const batPathFileName As String = "C:\work\exec.bat" 'WshShellオブジェクトからインスタンスを生成する Set obj = New WshShell '選択されたバッチファイルをパラメタに指定して、バッチファイルを呼び出す Call obj.Run(batPathFileName & " " & "C:\work", 0, WaitOnReturn:=True)
コードの解説
まずは11行目を見てください。
11行目でRunメソッドでバッチファイルを呼び出しています。
Runメソッドには、「バッチファイル名」と「バッチファイル実行に必要な引数」を半角スペースでつないた文字列を、第1引数に指定しています。
この「バッチファイル実行に必要な引数」をバッチファイルが受け取り、バッチファイルの処理に使われます。
ちなみに、第2引数にはバッチファイル実行時のコマンドプロンプトのウィンドウの表示方法を指定(0は非表示にする設定値)、第3引数には「同期/非同期」の設定値(Trueは同期)を指定しています。
同期(True):呼び出したプログラムの終了をExcelのマクロ側が待つ
非同期(False):呼び出したプログラムの終了をExcelのマクロ側が待たない
なお、RunメソッドはWshShellオブジェクトからインスタンスを生成しておかないと実行できないので、必ずインスタンスを生成しておきます。(8行目を参照)
バッチファイルのコードも見てみましょう
先ほどExcelのマクロのコードをご説明しましたが、渡された引数をバッチファイルがどう受け取っているのか、バッチファイルのサンプルコードでご説明します。
バッチファイルのコードの例
@echo off rem データファイルの格納先とファイル名 set opFilePath=C:\work\output\outputFile.txt cd %1 rem データファイルの有無チェック if not exist %opFilePath%\%opFile% ( rem データファイルを作成する dir /b /s > %opFilePath%\%opFile% )
コードの解説
このコードでまず見て頂きたいのは6行目です。
6行目の%1に、Excelのマクロから渡された引数の値が入っています。
ちなみに、%1は引数取得用の変数を指します。
先ほどのExcelのマクロから本バッチファイルが呼び出された場合、Excelのマクロから渡された「C:\work」の文字列が%1に入っています。
cdコマンドにExcelのマクロから渡された引数であるディレクトリ名(C:\work)を指定し、そのディレクトリに移動しています。
もし渡された引数の数が2つなら、2つ目の引数は%2
もし渡された引数の数が3つなら、3つ目の引数は%3
もし渡された引数の数が4つなら、4つ目の引数は%4
・・・
といった感じで、渡された引数を受け取ることができます。
最後に
本記事では、Excelのマクロから引数をバッチファイルに渡して呼び出す方法についてご説明しました。
その方法は、バッチファイルを呼び出すRunメソッドの引数に、「バッチファイル名」と「バッチファイルに渡したい引数」を半角スペースでつないだ文字列を指定することです。
このRunメソッドが実行されてバッチファイルが呼び出される際に、「バッチファイルに渡したい引数」がバッチファイルに渡されます。
バッチファイルがこの「バッチファイルに渡したい引数」を受け取り、バッチファイルの処理に使われます。
もし今後本記事の内容と似たようなようなことをやろうとしてる場合、参考にしていただけたら幸いです。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。