• ベストアンサー

バッチファイルでエクセルのマクロを動かしたい

最近になってバッチファイルを知りました。バッチファイルを使ってエクセルファイルの中に書かれたマクロを動かしたいと思っています。 過去ログの検索をし、マクロが書かれたエクセルを起動させるところまではわかりました。 しかしその先がわかりません。わからない内容は次の二つです。 1)エクセル起動時マクロを有効にするかどうか聞いてきます。自動的に有効で起動させるにはどうしたらいいでしょうか。 2)Macro1という名前のものが001.xlsの中に既に作ってあったとして、これを作動させるにはどのようにしたらいいのでしょうか。 環境はwin xp sp2 office2000です。 過去ログを参考にし、下記記述で001.xlsを開くところまではわかりました。この後をどうすればいいか、よろしくお教えください。 "C:\Program Files\Microsoft Office\Office\excel.exe" "c:\My Documents\001.xls"

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 Perl 自体は、また別というか、Wscript.Run で呼び出してもよいと思いますが、 WScript でも、Perl の複雑な処理にはかないませんが、正規表現も持っていますから、多少は似たようなマネが出来ます。 バッチプログラムと違うのは、まず、フォルダを探すことが可能だということと、フォルダを選択する、ダイアログが使えるということです。 個別のファイルのファイルの移動なら、 Const myPATH ="C:\My Documents\ Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile =objFS.GetFile(myPATH & "Test.txt") objFile.Move "C:\" 個別のファイルのファイルの削除なら、 Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile =objFS.GetFile(myPATH & "Test.txt") objFile.Delete ---------------------------------------------- ワイルドカードも使うようでしたら、 Const myPATH ="C:\My Documents\ Set objFS = CreateObject("Scripting.FileSystemObject") objFS.MoveFile myPATH &"*.txt", "C:\" ですし、ファイルの削除なら、 Set objFS = CreateObject("Scripting.FileSystemObject") objFS.DeleteFile myPATH &"*.txt" ということになります。 --------------------------------------------- なお、余談ですがVBAの技術は、今はもう停滞したままですが、総じて、テキスト・スクリプト側は、日進月歩、Win XP になってからは、1年ごとに、まるで違う技術が導入されているのです。歯が立たないかもしれませんが、どんな風になっているかは、知っておいたほうがよいかもしれません。昔は、コンパイラーを使った、実行ファイルしたが、今は、テキスト・スクリプトで、ツールを出しています。それは、Office 2007 も同じですね。そして、今は、スクリプトで、.Net FrameWork まで使ってしまおうというのだから、時代は変わっているのです。(知っている人には、間が抜けた発言ですが。) 参考サイト: ヘイ! スクリプティング ガイ http://www.microsoft.com/japan/technet/scriptcenter/learnit.mspx

gogo2500
質問者

お礼

何度も丁寧な回答ありがとうございます。 WScriptは全く知らなかったのですが、教えていただいた参考サイト、かなりわかりやすいので、今から取り組んで行きたいと思います。 ありがとうございました。

その他の回答 (3)

  • yuji0401
  • ベストアンサー率9% (28/284)
回答No.4

Dim obj Set obj = WScript.CreateObject("Excel.Application") obj.Visible = True obj.Workbooks.Open "C:\Documents and Settings\Administrator\My Documents\001.xls" obj.Application.Run "Macro1" 上記をメモ帳に貼り付けて、適当な名前に拡張子vbsで保存して実行してください。 バッチは無理なのでこれで勘弁してください(笑)

gogo2500
質問者

お礼

ありがとうございます。今からWScriptにも取り組んで行きたいと思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >バッチファイルの書き方で教えていただきたく マクロの呼び出しなどできるはずもありませんし、Officeのセキュリティの問題も解決しません。 かつては、私も、バッチ(Shell)プログラムをずいぶん書いていましたが、Windows が使えない環境という設定なら分かりますが、Excel自体は、Windows のアプリケーションですから、それをバッチプログラムでっていうのは、私には良く分からないです。もう、WScript でも古いというのに、なお古い方法を選ぶのは、ちょっともう世界が違うように思います。 バッチプログラムで出来ることなど、今の時代でみると、本当に限られていると思います。 >これは自分で出来るので質問の中には書かなかったのですが、マクロを作動させる部分がWscript プログラムになると流れが作れなくなってしまいます。 流れというのか何か分かりませんが、バッチプログラムが、WScriptより優れているということはありえないです。すべてを移植しても、余りあると思います。 >ディレクトリー間のファイルの移動、削除等がエクセルマクロの前後に付いてきます。 その作業程度なら、WScript に置き換えればよいのでは?それで、バッチということもないと思います。分からなければ、Shell を使えばよいです。 もし、あくまでも、バッチプログラムをお望みなら、どなたかにお任せします。

gogo2500
質問者

補足

何度も丁寧な回答ありがとうございます。 質問をかなりはしょっていたため、ご迷惑をおかけし申しわけありません。 今私がやっている作業は、ファイルをディレクトリー間で移動、その後そのファイルにperlのプログラムを動かし、そのデーターをエクセルに読み込みマクロを利用した後、特定の拡張子を持ったファイルを削除するという作業です。 以前は全てこれらを手作業でやっていました。 最近になってバッチファイルを知り、データーの移動、perlの利用、データー削除を自動で出来るようになり、随分便利になったのですが、エクセルの部分だけが手作業で残っているため、何か方法はないものかと質問したしだいです。 現在利用しているバッチファイルの中に、エクセルのマクロ利用も組み込めたら簡単でいいなと単純に思っていました。 バッチファイルではマクロの呼び出しが出来ないのであれば、今からWscript も覚えたいと思います。ありがとうございました。 もし出来ましたら、移動とか削除の書き方を教えていただければありがたいのですが。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 batch プログラムというのは、DOSの時代のものですね。 今の所は、Wscript プログラムを書いておきますから、メモ帳などに貼り付けて、拡張子を".vbs" にすればよいです。batch プログラムよりも遥かに優れています。 なお、(1) は、オブジェクトを作っていますから、無視されます。ただし、他人の環境では、ロックを外さないと以下は動きません。セキュリティを変更するコードは、掲示板では控えさせていただきます。 ''ExcelOpen.vbs Dim xlApp Dim xlWb CONST nFILE ="c:\My Documents\001.xls" Set xlApp = Wscript.CreateObject("Excel.Application") With xlApp .Visible =True Set xlWb =.Workbooks.Open (nFILE) .Run xlWb.Name &"!Macro1" End With Set xlApp = Nothing

gogo2500
質問者

補足

早速回答いただきありがとうございます。 実は質問の中には書いていませんでしたが、マクロを作動させたいバッチファイルの中には、ディレクトリー間のファイルの移動、削除等がエクセルマクロの前後に付いてきます。 これは自分で出来るので質問の中には書かなかったのですが、マクロを作動させる部分がWscript プログラムになると流れが作れなくなってしまいます。 いまさら古いDOSというのはあるかもわかりませんが、バッチファイルの書き方で教えていただきたく、よろしくお願いいたします。

関連するQ&A

  • バッチファイル エクセル起動

    いつも大変御世話になっております。 WindowsVISTA環境で以下バッチ【ABC.bat】が稼動します。 "ABC.bat"------------------------------------------------- "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE" "F:\EXCEL_OPEN\ABC.xls" echo %ERRORLEVEL% pause "ABC.bat"------------------------------------------------- 上記バッチの構文について3点質問があります。 (1)OS等が変わった場合、EXCEL.EXEの格納パスも変更するので   当然変更しなければいけないのでしょうか? (2)上記バッチを起動する前に他のエクセルを開いていた場合(例えばDEF.xls)、  ABC.xlsとDEF.xlsを両方閉じなければバッチの後続処理が動きません。  ABC.xlsだけ閉じてバッチの後続処理を動かす事は可能なのでしょうか? (3)上記構文でエクセル(マクロ)からエラーレベルを取得できるのでしょうか?  ※上記バッチで開くエクセルは開いたら自動でマクロが動きます。 もしご存知の方がいらっしゃるようでしたら、ご教授願いますでしょうか? 以上、何卒宜しくお願い致します。

  • vbsで、フォルダ内にあるcsvファイル全てを開き、マクロを起動させた

    vbsで、フォルダ内にあるcsvファイル全てを開き、マクロを起動させたい。 こんにちは。 お世話になっております。 さて、最初はバッチでどうにかならないかと思っていましたが、下記vbsソースを見つけ、 早速チャレンジしたのですが、ファイルが開くところまではうまく行きますが、「マクロ Macro1がありません」というメッセージが出てしまい、マクロが実行されません。 手動でマクロを実行しようとするときに出てくるマクロ一覧には、PERSONAL.XLS:Macro1と、表示されております。 マクロの保存先をまちがえているのでしょうか? また、あるフォルダのcsvファイル全てに対して1つのvbsキックで処理が行なわれるようにするには、どの様にすればいいでしょうか? よろしくお願いします。 ----------------------------------------------------------------------- Dim obj Set obj = WScript.CreateObject("Excel.Application") obj.Visible = True obj.Workbooks.Open "C:\Documents and Settings\Administrator\My Documents\001.xls" obj.Application.Run "Macro1"

  • バッチファイルからAccessのマクロを操作する。

    コマンドでACCESS2002のファイルを開けてそのファイルのマクロを操作するバッチファイル作成したいのが、よくわかりません教えてください。 "C:\Program Files\Microsoft Office2002\OFFICE\MSACCESS.EXE" "C:Sample\text.mdb" /x "mcr_test" ではマクロが動きません。

  • Dosのバッチをマクロにしたい

     以下の内容のDosバッチファイルがあるのですが、これをマクロ化してどのPCでも使えるようにしたいと思います。どのように書けば良いのかご指導ください。  DOS.batの内容は、概ね以下の通りです。 del I:\AAA\BBB\*.xls 'ワークブックの削除 D: cd D:\Program Files\Microsoft Office\Office\ MSACCESS.EXE    'ACCESSの立ち上げ I:\CCC\DDD\EEE.mdb 'EEE.mdbを開く(データベースの修正作業)  'これが終了したら(右上の×をクリックすると)次へ EXCEL.EXE      'Excelの立ち上げ I:\FFF\GGG\HHH.xls 'HHH.xlsを開く 'auto_openマクロが走る(終了すると) EXCEL.EXE       'Excelの立ち上げ(これは無駄?) I:\JJJ\KKK\LLL.xls 'HHH.xlsを開く 'auto_openマクロが走る '以下excelのマクロをいくつか走らせます。  よろしくお願いします。

  • ACCESSからEXCELの特定のファイル呼び出し

    ACCESSのメインフォームからコマンドボタンとマクロを使ってEXCELの特定のファイル(デスクトップ上にある顧客情報.xls)を参照したいのですが、EXCELを起動するところまでは出来ますが、このファイルが開けません。マクロのコマンドラインの記述がわかっていないようです。素人ですのでどなたか教えてください。 現在、コマンドラインには下記のように記述しています。 c:\Program Files\Microsoft Office\Office10\excel.exe \顧客情報.xls 記述のどこが違っているのでしょうか?ちなみに、顧客情報.xlsは C:\Documents and Settings\Administrator\デスクトップ  にあるとファイルには書いてありますが、この記述を全て書いてもエラーが出ます。 WINDOWS XP  ACCESS2002 EXCEL2002 を使用しております。 どなたかお教えください。よろしくお願い致します。

  • エクセルマクロでファイルを開かず行をしらべたい

    こんにちは! エクセルマクロでファイルを開かず一番下の行を調べたいのですが、どうしたらよいでしょうか? 色々試行錯誤して、下記を組んでみましたが、上手くできませんでした。 test1のエクセルに下記のマクロを入れてあります。 C直下のtestフォルダの中のtest2.xlsのsheet1のファイルを読み込みたいです。 Dim line As Long Dim names As String names = "C:\test\[test2.xls]sheet1" line = ExecuteExcel4Macro("'" & names & "'!R1C1").End(xlUp).Row 「ファイルを開かず一番下の行を調べる」ことができれば、上記のマクロを動くようにするでも、別のマクロを提示するでも構いませんので、アドバイスのほどよろしくお願いいたします。

  • バッチファイルファイル→VBS→エクセル マクロを有効にして起動

    Win/XP エクセル2002使用です。 VBSからエクセルのマクロを有効にして立ち上げたいのですが、 上手くいきません。 バッチファイル側  cd /D c:\  C:\***.vbs  exit /B VBS側 'エクセル起動  Set WshShell = CreateObject("WScript.Shell")  WshShell.CurrentDirectory = "C:\***"  WshShell.Run "C:\***\***.xls",3  WScript.Sleep(5000)  WshShell.SendKeys("E") '←マクロを有効にする  WScript.Sleep(5000)  WshShell.SendKeys("U") '←データソースへのリンクを更新 エクセル側(マクロ)  Sub Auto_open()   Application.OnTime TimeValue("13:00:00"), "Action"  End Sub  Sub Action()    ・・・(省略)・・・  End Sub ----------------------------- また、エクセルマクロは、VBSではなく手動で立ち上げますと、 問題なく時間になった時(13時)に作動します。 VBSのRunメソッドが、 エクセルマクロの Application.OnTime を待たずに走ってしまうことで、 エクセルマクロが無効になってしまっているのではないか? もしくは、データ更新のための sendkey("U")によって マクロが無効になってしまっているのはないか? と思っています。 恐れ入りますが、 よろしくアドバイスの程お願いします。

  • ■ エクセルマクロについてです。初級?

    エクセルのマクロでデスクトップにあるエクセルファイルを開くにはどうしたらいいのでしょうか? 現在は、エクセルファイルA.xls B.xlsという2つを開いていて、マクロを実行することができるのですが、これをA.xlsだけ開いている上体で、実行したいのです。 なので、デスクトップに置いてあるB.xlsファイルを開くコマンド?というか、関数が知りたいのですが、どうしたらいいのでしょうか? 現在はこのような感じになっております。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2008/9/10 ユーザー名 : ' ' ActiveCell.FormulaR1C1 = "12345" Range("G17").Select ActiveCell.FormulaR1C1 = "129876" Range("G18").Select Windows("B.xls").Activate Range("N16").Select ActiveCell.FormulaR1C1 = "8/4/2008" Range("N17").Select ActiveWorkbook.Save Range("O16").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

  • Excelでファイルを開くをマクロで行いたい

    マクロ初心者です "ファイルを開く"をマクロの記録で記録させると ChDir "C:\Documents and Settings\○○\△△\※※" Workbooks.Open Filename:= _ "C:\Documents and Settings\○○\△△\※※¥LotLog20070131.csv" Windows("●●●.xls").Activate End Sub と記録されます この中で 開きたいファイルネ-ム(上記ならばLotLog20070131.csv)を "●●●.xls"の どこかのセルを参照に開きたいのですが どうすれば宜しいのでしょうか?

  • imacroで組んだマクロをバッチファイルで自動実行させたい。

    imacroで組んだマクロをバッチファイルで自動実行させたい。 Firefoxアドオンの「imacro」でマクロファイルを作成したので、それをバッチファイルで起動できるようにし、コンピュータ起動時に自動的に実行されるようにタスクスケジューリングしたいと思っています。 バッチファイルには以下のコマンド書けば可能かと思ったんですが、実行されません。 start "C:\Program Files\Mozilla Firefox\firefox.exe" http://run.imacros.net/?m=マクロファイル名.iim 良い方法を知っておられる方がおられましたらご教授願います。

専門家に質問してみよう