質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

3836閲覧

VBAから呼び出したbatファイルの処理がおかしい

kingkamehameha

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2020/01/09 05:23

#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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/01/09 05:48

変数bat、strPathの値の確認はしていて問題ないということでしょうか? 「指定されたファイルが見つかりません。」を出力しているのはVBA側ですか?バッチファイル側ですか? バッチファイルが呼ばれた後のカレントパスは確認していますか? Excelファイルとバッチファイルのフォルダは別々ですか? 色々と情報が足りません。
kingkamehameha

2020/01/09 06:27

strpathの値は確認していますし、batファイル(cmd)は起動出来ています。 「指定されたファイルガがみつかりません。」と表示されているのは、cmd側です。 バッチファイルが呼ばれた後のカレントパスは確認しています。 Excelとbatファイルは別々のフォルダです。Excelから2個下層のbatファイルを実行しようとしています。
ttyp03

2020/01/09 06:31

バッチファイルが呼ばれた後のカレントパスを確認してみてどうだったのでしょうか? バッチファイル内で参照しているrename.csvがあるフォルダを指しているのでしょうか?
kingkamehameha

2020/01/09 06:33

カレントパスは実際に利用したいフォルダに通っていました。 Excelファイル-請求書-請求書xxxx この請求書xxxxに該当のファイルと、renae.csv.とrenamebatが入っています。
ttyp03

2020/01/09 06:43 編集

CSVの中身はフルパス名で書かれているのでしょうか?相対パスでしょうか?
kingkamehameha

2020/01/09 06:43

batファイル自体は下記の拾い物で、こちらで一切触っておりませんが、ここに問題があるのでしょうか? https://profile.ne.jp/w/c-59556/ 何故、手動で起動したらうまくいく物がVBAから呼び出すとエラーになるのでしょうか?
ttyp03

2020/01/09 06:45

エラーが出るとき「REN ○○ ○○」と出ていると思いますが、そこのそれぞれのファイル名は正しいですか?
kingkamehameha

2020/01/09 06:59

ファイル名は正しいですが、恐らくxlsmがあるフォルダを対象にしてしまっているようです。 xlsmと同じフォルダにファイルを置いた所、無事リネームされています。 bat = "C:\sys\msexcel\請求書\" & PDFfolder & "\rename.batが本来実行しているパスなのですが、リネーム対象としているフォルダは、"C:\sys\msexcel\請求書”の中になってしまっているようです。
kingkamehameha

2020/01/09 07:04 編集

恐らくbatで渡しているパスのbatファイルではなく、xlsmと同じフォルダのbatを起動しているようなのです。 パスに間違いはないのですが。。。。 batをDebug.Printで出力した結果 (C:\sys\msexcel\請求書\請求書一般\rename.bat )
guest

回答2

0

どのフォルダに何があるのかよくわからなくなりましたが・・・

バッチファイルの先頭でカレントディレクトリをバッチファイルがあるディレクトリに変更したらどうでしょうか。

BAT

1CD %~dp0 2FOR /F "tokens=1,2 delims=," %%a in (rename.csv) do REN %%a %%b 3pause

投稿2020/01/09 08:17

編集2020/01/10 00:10
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kingkamehameha

2020/01/09 09:11

Wscript.Shell関数を使用する事で問題なく起動する事が出来ました。
ttyp03

2020/01/09 10:00

ん?回答した方法ではダメでした?
kingkamehameha

2020/01/10 00:08

回答頂いた方法を実行する前に、WScript.Shellで実行したので自己解決に記入してしまいました。 ttyp@03さんに回答頂いた方法で試してみました。
ttyp03

2020/01/10 00:11

すみません、1行目に余計なcdがついていたので削除しました。 こちらでお試しください。
ttyp03

2020/01/10 01:17

で、どうでしたか?
guest

0

自己解決

#Shell関数ではなくWScript.Shell関数を使えってことらしい。
Shell関数ではChDirをしても効かないようで、CurrentDirectoryで移動して、"""rename.bat"""とすれば無事実行できました。ダブルクォーテーションで囲むのは、エスケープ文字にするためです。

投稿2020/01/09 08:27

kingkamehameha

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問