エクセルVBAでバッチ処理を起動する方法とは?

このQ&Aのポイント
  • エクセルVBAでバッチ処理を起動し、FTPを自動実行してCSVファイルを取得する方法について教えてください。
  • VBAからバッチファイルを実行する際に、CSVファイルの取得がうまくいかない問題があります。どのような対処方法があるのでしょうか?
  • .batファイルを単独で起動させると、問題なくCSVファイルの取得ができますが、VBAから実行すると取得できません。解決策を教えてください。
回答を見る
  • ベストアンサー

エクセルVBAで、バッチ処理を起動すると・・・

Windows/XP/pro、エクセル2002 使用です。 c:\autocsvフォルダーに、MS-DOSコマンドを使ってFTPを自動実行しサーバーからCSVを自動的に取得する.TXTファイルと、バッチファイルの.batファイルをおいています。 参考URL http://www.ponko2.com/ftp_bat.html この.batファイルをVBAから呼び出して実行させるように下記のコードを記述ましたが、ファイルは起動するものの、CSVファイルを取得(またはLogin)できません。Openメソッドを使ってもうまくいきませんでした。実行する関数の間違いと思っていますが、それとも、VBAからバッチファイルを実行する場合の何か決まりごと等があるのでしょうか? Sub test() Dim str As Variant str = Shell("c:\autocsv\auto.bat", vbNormalFocus) Application.Wait Now + TimeValue("00:00:10") End Sub (VBAの実行をステップインを使って1行ずつ実行してもファイルを取得できません) なお、.batファイルを単独で起動させた場合は、問題なくcsvファイルの取得はできています。 お手数ですが、ご指導いただけますようお願いします。

  • ken123
  • お礼率73% (299/409)

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

まことに申し訳ありません。 CMD/Cを書いてはいけません。動作しません。 当方、試験でauto.batを以下の記述として、結果が得られました。 (cmd/c無しです。ホントにすみません) dir > c:\dirtext.txt exit 実行後にカレント(Mydocuments)フォルダの一覧をCドライブのルート(C:\)にdirtext.txtとしてテキスト化します。 なのでauto.bat の内容の問題と思います。

ken123
質問者

お礼

bin-chan様、ありがとうございました。 cmd/cはあった方が良いみたいです。 ご指摘通りauto.batの他のプログラムから実行するときは、.batファイルと一緒のフォルダーに入れていても、.batの実行でパス位置を取得する必要があるみたいです。 本当にありがとうございました。今後ともよろしくお願いします。

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

#1です。 OSがXPでしたね。 str = Shell("c:\autocsv\auto.bat", vbNormalFocus) を str = Shell("cmd/cc:\autocsv\auto.bat", vbNormalFocus) としてください。 さらに、バッチの最後の行に EXIT を一行追加してください。 単独実行の場合には影響ありませんが、CMD/Cで作成したShellを閉じる必要があります。

ken123
質問者

補足

bin-chan様、早速のご回答ありがとうございます。 何故か、ファイルが見つかりませんとなります。 ファイルは間違いなく存在します。 ドライブの指定の前にコマンドがいるのですね>>> 自分でも試してみますが、できればご回答よろしくお願いします!!!

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

str = Shell("c:\autocsv\auto.bat", vbNormalFocus) を str = Shell("command/cc:\autocsv\auto.bat", vbNormalFocus) としてください。

関連するQ&A

  • VBA バッチファイルでコピー出来ない

    以下のマクロを作りましたが、うまくいきません。 フォルダBにあるバッチファイルを実行するだけのマクロで、バッチファイルはフォルダAにあるファイルを自身のフォルダつまりフォルダBにコピーするものです。 マクロ Sub Test() Dim Str As String Str=shell(folderB\batch.bat, vbnormalfocus) End sub Batch.batの中身 Copy folderA\fileA . 注:folderAやfolderBはそれぞれのフォルダのフルパスです。 実行すると、何故かフォルダBでなくてデスクトップにコピーされます。バッチファイルをクリックして直接起動すると、目論見通りフォルダBにコピーされます。コマンドプロンプトからフォルダBに移動し、バッチファイルを起動しても、目論見通りフォルダBにコピーされます。 マクロから起動した時だけ、どうしてデスクトップにコピーされるのでしょうか?

  • VBA バッチファイルでコピーできない

    この質問は直近で出した質問を誤って締め切ってしまったため、再質問として書いてます。 以下のマクロを作りましたが、うまくいきません。 フォルダBにあるバッチファイルを実行するだけのマクロで、バッチファイルはフォルダAにあるファイルを自身のフォルダつまりフォルダBにコピーするものです。 マクロ Sub Test() Dim Str As String Str=shell("""" & folderB\batch.bat & """", vbnormalfocus) End sub Batch.batの中身 Copy "folderA\fileA" . '見えにくいですが、最後にピリオドがあります。 folderAやfolderBはそれぞれのフォルダのフルパスです。パスに空白を含むため " で囲むようにしてます。 実行すると、何故かフォルダBでなくてデスクトップにコピーされます。バッチファイルをクリックして直接起動すると、目論見通りフォルダBにコピーされます。コマンドプロンプトからフォルダBに移動し、バッチファイルを起動しても、目論見通りフォルダBにコピーされます。 マクロから起動した時だけ、どうしてデスクトップにコピーされるのでしょうか?

  • VBAでバッチ実行ができません

    手動では動くバッチファイルがマクロからだと動きません。 何か必要なコマンドがあるのでしょうか? よろしくお願いします。 VBA--------- Shell "C:\test.bat", vbNormalFocus test.bat--------- perl a.pl b.log c.log d.log > e.csv exit OSがXP、Excelが2003です。

  • エクセル VBA バッチが動かない。

    以下のVBAを試行錯誤の末(未熟なもので・・) 作ってみました。 デスクトップ上のフォルダを確認にて、存在する場合はそのままバッチ実行、 存在しない場合はフォルダを作成してバッチ実行。 というものなのですが、フォルダが存在する場合はすんなり行くのですが、 存在しない場合、フォルダを作成した後、バッチ処理がされなくて 困っています。どこが悪いのでしょうか? 是非ご教授お願いいたします。 ちなみにバッチはXCOPYです。 Sub SET_Original() Dim strPATHNAME As String strPATHNAME = "C:\Documents and Settings\ユーザー\デスクトップ\フォルダ" If StrConv(strPATHNAME, vbUpperCase) = "FALSE" Then Exit Sub If Dir(strPATHNAME, vbDirectory) = "" Then MsgBox "フォルダは作成します。", vbExclamation MkDir "C:\Documents and Settings\ユーザー\デスクトップ\フォルダ" Exit Sub End If Dim str As Variant str = Shell("c:\Documents and Settings\ユーザー\デスクトップ\copy.bat") End Sub

  • Accessからバッチファイルを実行したい

    accessのVBAで、フォルダ内にあるバッチファイルを実行したいのですが、 このサイトを参考につくってみたのですが、うまくいきません。 http://blog.s21g.com/articles/1202 「実行時エラー-2147024894 Runメソッドは失敗しました。'IWshShell3'オブジェクト」 とでます。 どうしたらいいか教えてください。。。 ちなみに、そのバッチは単純にCSVを他の格納先から、ダウンロードするだけの単純なバッチです。 ------------- Private Sub バッチ実行_Click() Dim strShellCommand As String Dim objWSH As Object strShellCommand = "\\~省略~類¥DL_BOPE.bat" ' バッチのあるパスとバッチファイルの名前を入れています Set objWSH = CreateObject("WScript.Shell") objWSH.Run strShellCommand, vbNormalFocus, True ' 第3引数がTrueなら、同期実行 Set objWSH = Nothing End Sub

  • バッチ処理でftpから自動的にダウンロード

    バッチ初心者です。 バッチを使用してLAN内のftpサーバーからcsvを別のマシンのフォルダへ定期的(10分毎)にダウンロードするようにしたいのです。 テキストファイル(ファイル名ftpcmd.text)に以下のように記述しました。 open 「ftpサーバーのIPアドレス」 「ユーザー名」 「パス」 mget*.csv quit バッチファイル(auto_ftp.bat)に以下のように記述しました。 ftp -i-s:ftpcmd.txt ダウンロード先の指定と10分毎に実行させるにはどのようにすればいいですか? 宜しくお願いします。

  • バッチファイルを1個だけしか起動しないようにしたい

    エクスプローラー上から バッチファイル(test.bat)を ダブルクリックしてバッチファイルを実行しています。 通常はコマンドプロンプトが1個だけ表示されて、 バッチファイルが実行して実行が終了すると コマンドプロンプトも閉じられます。 しかし、時々、 コマンドプロンプトが2個表示されることがあります。 つまり、ダブルクリックが、 1回ではなく2回実行されたと誤認識されて、 同じバッチファイル(test.bat)が 2つ起動してしまったと思われます。 当然、その後の処理はおかしくなります。 (バッチファイル(test.bat)の中に 何らかのコードを追加するなどして) 必ず1個だけしか起動しないようにすることは、 できないでしょうか。 (Windows10)

  • バッチファイルからVBAに引数を渡したい

    お世話になります。 a.batというバッチファイルがあります。 このファイルを起動させた時にABC.xlsというEXCELが起動するようにしたいのですが、その際にバッチファイル側から"1303"という文字列をabc.xlsに引数として渡したいのです。 EXCEL側ではauto_open(a)で待ち受けて、このaに"1303"が入ってmsgで"1303"と表示させたいのですが、引数は省略出来ません、というエラーが出てしまいます。 どなたかやり方をご教授いただけませんでしょうか?よろしくお願い致します。 環境 WindowsXP SP3 Excel2003 ============================== バッチファイル側 ============================== @echo off echo バッチファイルを実行します。 ABC.xls "1303" echo 終了しました。 ============================== EXCEL VBA側 ============================== Sub auto_open(a As String) Msg a end sub

  • エクセルVBAよりBATファイルを起動する方法。

    エクセルVBAよりBATファイルを起動する方法を教えてください。 現在下記の様な内容で作ってみましたがうまくいきません。 ***VBA側*** Private Sub CommandButton5_Click() Dim myID As String myID = Shell("D:\test.bat", vbMaximizedFocus) End Sub ***BATファイル側*** xcopy "d:\test1" "d:\test2"/I/Y エクセル2003で実行してみましたがうまくいきません。BATファイルは起動しているようなのですが、BATファイルの処理がうまくいかなくて困っています。(ちなみにBATファイル単体をダブルクリックで実行すると問題ないのですが…) 同じ内容をエクセル2007で実行するとうまくいきました。(ちなみにOSはVISTA) 2003(ちなみにOSはxp)で上手くいかないのがどうしてかわかりません。 どうか詳しい方ご教授ください。よろしくお願いいたします。

  • VBAでのBAT起動

    VBAでのBAT起動 VBAでBAT起動が上手く行きません。 excel2003、xpを使っています。 C:\test/ の中に、 connect FTP_DL.bat の二つのファイルがあります。 connectの中に記述し、 FTP_DL.batをクリックすることで動くbatとなっております。 Shell "C:\test/FTP_DL.bat", 1 でDOS画面は一瞬でるのですが、batの中身の動作はしてくれません。 普通にダブルクリックでbatを起動すると動作します。 どう記述を変えればよいでしょうか?

専門家に質問してみよう