【VBA】コマンドプロンプトのコマンドを実行する

前提

「Windows Script Host Object Model」を参照設定しなくとも動作するよう、CreateObject関数を使用して必要なオブジェクトを取得する
※他のPC上で実行する際、参照設定が原因で上手く動作しないことがあるため

サンプルプログラムの概要

・「cdコマンド」を実行しINPUTフォルダへ移動する
・「copyコマンド」を実行し3つテキストファイルを結合する
・配列へ3つのテキストファイル名を格納し、Join関数により文字列結合する
・文字列結合時のデミリタは「 + 」とする

サンプルプログラム

'変数の宣言を必須
Option Explicit

Sub promptCommandExeSample()

    Dim inputFolder As String
    Dim outputFolder As String
    Dim arrInputFile(2) As String
    Dim command As String
    'Dim count As Integer
    Dim wsh As Object
    Dim result As Object
    
    'INPUTフォルダを設定
    inputFolder = "C:\Users\user\Desktop\input"
    
    'OUTPUTフォルダを設定
    outputFolder = "C:\Users\user\Desktop\output"

    'INPUTファイルを配列に格納
    arrInputFile(0) = "input1.txt"
    arrInputFile(1) = "input2.txt"
    arrInputFile(2) = "input3.txt"
    
    '実行するコマンドを設定(INPUTフォルダへ移動、copyコマンドを設定)
    command = "cd " & inputFolder & " & copy /b "
    
    '結合対象のinputファイルをコマンドへ追加(繰り返しで追加する方法)
    'For count = 0 To UBound(arrInputFile)
    '    '最後の要素でない場合は「+」を追加
    '    If count <> UBound(arrInputFile) Then
    '        command = command & arrInputFile(count) & " + "
    '    Else
    '        command = command & arrInputFile(count) & " "
    '    End If
    'Next count
    
    '結合対象のinputファイルをコマンドへ追加(Join関数で追加する方法)
    command = command & Join(sourceArray:=arrInputFile, delimiter:=" + ")
    
    'outputファイルをコマンドへ追加
    command = command & " " & outputFolder & "\outputFile.txt"

    'コマンドを実行(Runメソッド)
    'vbHideでコマンドプロンプト画面を非表示
    'Trueで同期(コマンドが完了するまで制御が戻らない)
    Set wsh = CreateObject("WScript.Shell")
    wsh.Run "%ComSpec% /c " & command, vbHide, True
    
    'コマンドを実行(Execメソッド)
    'Set result = wsh.Exec("%ComSpec% /c " & command)
    'コマンドの実行が終わるまで待機
    'Do While result.Status = 0
    '    DoEvents
    'Loop

    '後片付け
    Set result = Nothing
    Set wsh = Nothing

End Sub

タイトルとURLをコピーしました