Option Explicit
' 変換関数:成功すると変換後のファイルパスを返し、失敗するとエラー文言を返します
Public Function ConvertTextFile(ByVal exePath As String, ByVal srcPath As String, ByVal encTag As String) As String
Dim wsh As Object
Dim oExec As Object
Dim cmd As String
Dim result As String
Set wsh = CreateObject("WScript.Shell")
' パスのスペース対策でダブルクォーテーションを付与
cmd = """" & exePath & """ """ & srcPath & """ " & encTag
' アプリを実行
Set oExec = wsh.Exec(cmd)
' 終わるまで待機
Do While oExec.Status = 0
DoEvents
Loop
' 結果判定
If oExec.ExitCode = 0 Then
' 成功時はファイルパスが返ってくる(改行を除去して取得)
result = Replace(oExec.StdOut.ReadAll(), vbCrLf, "")
ConvertTextFile = result
Else
' 失敗時
result = "ERROR: " & oExec.StdErr.ReadAll()
ConvertTextFile = result
End If
Set oExec = Nothing
Set wsh = Nothing
End Function
' 使用例
Sub TestRun()
Dim newPath As String
' exeの場所と対象ファイルを指定
newPath = ConvertTextFile("C:\Tools\TextEncodingConverter.exe", "C:\Data\list.csv", "sjis")
If InStr(newPath, "ERROR:") > 0 Then
MsgBox "失敗しました", vbCritical
Else
MsgBox "変換完了!ファイルを開きます: " & newPath
Workbooks.Open newPath
End If
End Sub
Batch
@echo off
set EXE_PATH="TextEncodingConverter.exe"
set INPUT_FILE="C:\data\daily_report.csv"
rem 実行して結果を一時ファイルに保存
%EXE_PATH% %INPUT_FILE% sjis > result_path.txt
rem 成功か失敗かを判定 (0=成功)
if %ERRORLEVEL% equ 0 (
set /p NEW_FILE=<result_path.txt
echo 成功しました!
echo 作成ファイル: %NEW_FILE%
) else (
echo 変換に失敗しました。
pause
)
del result_path.txt