#VBAで呼び出したbatファイルがおかしい
手動で実行すると、batファイルとして処理がされます。
しかし、VBAからShell関数を使用してbatファイルを指定して、実行すると「指定されたファイルが見つかりません。」と表示されます。
しかし、cmd上で実行しているファイルまでのパスは同じなので、VBAで呼び出した際に何かパスが変わっていたりする可能性があるのでしょうか?
###処理の流れ
main → shellbat (batファイルのパスを渡す)
shellbat (受け取ったパスのbatファイルの実行)
rename.csv(A列:元のファイル名 | B列:新しいファイル名)
rename.bat(rename.csvを読み込んでリネームする)
##エラーコード
指定されたファイルが見つかりません。
main
1bat = "C:\sys\msexcel\請求書\" & PDFfolder & "\rename.bat"
shellbat
1Dim strPath As String 2Dim RetVal As Variant 3 4'Shellにパスやアプリケーション名を渡す時には注意! 5'------------------------------------------------- 6'注意①パスや名前に空白が無い場合は問題ありません 7strPath = bat 8 9'タスクID取得及び実行 10RetVal = Shell(strPath, 1) 'vbMinimizedNoFocus 11 12If RetVal <> 0 Then 13 MsgBox strPath & vbCr & "実行されました。", vbInformation, "[タスクID]" & RetVal 14Else 15 MsgBox strPath & vbCr & "実行出来ません。", vbCritical, "[ERROR]" 16End If
bat
1FOR /F "tokens=1,2 delims=," %%a in (rename.csv) do REN %%a %%b 2pause
変数bat、strPathの値の確認はしていて問題ないということでしょうか?
「指定されたファイルが見つかりません。」を出力しているのはVBA側ですか?バッチファイル側ですか?
バッチファイルが呼ばれた後のカレントパスは確認していますか?
Excelファイルとバッチファイルのフォルダは別々ですか?
色々と情報が足りません。
strpathの値は確認していますし、batファイル(cmd)は起動出来ています。
「指定されたファイルガがみつかりません。」と表示されているのは、cmd側です。
バッチファイルが呼ばれた後のカレントパスは確認しています。
Excelとbatファイルは別々のフォルダです。Excelから2個下層のbatファイルを実行しようとしています。
バッチファイルが呼ばれた後のカレントパスを確認してみてどうだったのでしょうか?
バッチファイル内で参照しているrename.csvがあるフォルダを指しているのでしょうか?
カレントパスは実際に利用したいフォルダに通っていました。
Excelファイル-請求書-請求書xxxx
この請求書xxxxに該当のファイルと、renae.csv.とrenamebatが入っています。
CSVの中身はフルパス名で書かれているのでしょうか?相対パスでしょうか?
batファイル自体は下記の拾い物で、こちらで一切触っておりませんが、ここに問題があるのでしょうか?
https://profile.ne.jp/w/c-59556/
何故、手動で起動したらうまくいく物がVBAから呼び出すとエラーになるのでしょうか?
エラーが出るとき「REN ○○ ○○」と出ていると思いますが、そこのそれぞれのファイル名は正しいですか?
ファイル名は正しいですが、恐らくxlsmがあるフォルダを対象にしてしまっているようです。
xlsmと同じフォルダにファイルを置いた所、無事リネームされています。
bat = "C:\sys\msexcel\請求書\" & PDFfolder & "\rename.batが本来実行しているパスなのですが、リネーム対象としているフォルダは、"C:\sys\msexcel\請求書”の中になってしまっているようです。
恐らくbatで渡しているパスのbatファイルではなく、xlsmと同じフォルダのbatを起動しているようなのです。
パスに間違いはないのですが。。。。
batをDebug.Printで出力した結果 (C:\sys\msexcel\請求書\請求書一般\rename.bat
)

回答2件
あなたの回答
tips
プレビュー