- ベストアンサー
バッチファイルでエクセルのマクロを動かしたい
最近になってバッチファイルを知りました。バッチファイルを使ってエクセルファイルの中に書かれたマクロを動かしたいと思っています。 過去ログの検索をし、マクロが書かれたエクセルを起動させるところまではわかりました。 しかしその先がわかりません。わからない内容は次の二つです。 1)エクセル起動時マクロを有効にするかどうか聞いてきます。自動的に有効で起動させるにはどうしたらいいでしょうか。 2)Macro1という名前のものが001.xlsの中に既に作ってあったとして、これを作動させるにはどのようにしたらいいのでしょうか。 環境はwin xp sp2 office2000です。 過去ログを参考にし、下記記述で001.xlsを開くところまではわかりました。この後をどうすればいいか、よろしくお教えください。 "C:\Program Files\Microsoft Office\Office\excel.exe" "c:\My Documents\001.xls"
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 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
その他の回答 (3)
- yuji0401
- ベストアンサー率9% (28/284)
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で保存して実行してください。 バッチは無理なのでこれで勘弁してください(笑)
お礼
ありがとうございます。今からWScriptにも取り組んで行きたいと思います。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >バッチファイルの書き方で教えていただきたく マクロの呼び出しなどできるはずもありませんし、Officeのセキュリティの問題も解決しません。 かつては、私も、バッチ(Shell)プログラムをずいぶん書いていましたが、Windows が使えない環境という設定なら分かりますが、Excel自体は、Windows のアプリケーションですから、それをバッチプログラムでっていうのは、私には良く分からないです。もう、WScript でも古いというのに、なお古い方法を選ぶのは、ちょっともう世界が違うように思います。 バッチプログラムで出来ることなど、今の時代でみると、本当に限られていると思います。 >これは自分で出来るので質問の中には書かなかったのですが、マクロを作動させる部分がWscript プログラムになると流れが作れなくなってしまいます。 流れというのか何か分かりませんが、バッチプログラムが、WScriptより優れているということはありえないです。すべてを移植しても、余りあると思います。 >ディレクトリー間のファイルの移動、削除等がエクセルマクロの前後に付いてきます。 その作業程度なら、WScript に置き換えればよいのでは?それで、バッチということもないと思います。分からなければ、Shell を使えばよいです。 もし、あくまでも、バッチプログラムをお望みなら、どなたかにお任せします。
補足
何度も丁寧な回答ありがとうございます。 質問をかなりはしょっていたため、ご迷惑をおかけし申しわけありません。 今私がやっている作業は、ファイルをディレクトリー間で移動、その後そのファイルにperlのプログラムを動かし、そのデーターをエクセルに読み込みマクロを利用した後、特定の拡張子を持ったファイルを削除するという作業です。 以前は全てこれらを手作業でやっていました。 最近になってバッチファイルを知り、データーの移動、perlの利用、データー削除を自動で出来るようになり、随分便利になったのですが、エクセルの部分だけが手作業で残っているため、何か方法はないものかと質問したしだいです。 現在利用しているバッチファイルの中に、エクセルのマクロ利用も組み込めたら簡単でいいなと単純に思っていました。 バッチファイルではマクロの呼び出しが出来ないのであれば、今からWscript も覚えたいと思います。ありがとうございました。 もし出来ましたら、移動とか削除の書き方を教えていただければありがたいのですが。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 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
補足
早速回答いただきありがとうございます。 実は質問の中には書いていませんでしたが、マクロを作動させたいバッチファイルの中には、ディレクトリー間のファイルの移動、削除等がエクセルマクロの前後に付いてきます。 これは自分で出来るので質問の中には書かなかったのですが、マクロを作動させる部分がWscript プログラムになると流れが作れなくなってしまいます。 いまさら古いDOSというのはあるかもわかりませんが、バッチファイルの書き方で教えていただきたく、よろしくお願いいたします。
お礼
何度も丁寧な回答ありがとうございます。 WScriptは全く知らなかったのですが、教えていただいた参考サイト、かなりわかりやすいので、今から取り組んで行きたいと思います。 ありがとうございました。