ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Excelを画面に出さずに、マクロを、コマンドラインから引数つきで呼び出す

2007-09-06 14:25:45 | Officeソフト&VBA

 Excelの内容を書き出したいとか、その他もろもろのときで、

  ・Excelは表示しないで、
  ・Excelのマクロを、
  ・コマンドラインから実行したい

ときは、ありませんか?

 で、こーいうときは、たいてい、

  ・引数もいるのです。。

 そういうとき、どうするか・・

 ここが参考になりました。
Excel 起動オプションのお話(引数的なラブレターを渡したい)
http://www.ken3.org/vba/backno/vba086.html





■仕様

いま、引数に渡されたファイル名をもとに、引数の内容を書き出すという、
Excelのマクロプログラム(関数testmsg)が、下のよう
Public Sub testmsg(outfname As String, msg As String)
On Error GoTo err
    
    '   ファイルにメッセージを書き出す
    Open outfname For Output As #1
    Print #1, msg
    Close #1
    
    '   実行したら、Excelを終了する
    Application.Quit
    
    Exit Sub

err:
    '   エラーのときは表示しないとわかんないので
    Application.Visible = True
    MsgBox "エラーが起きました"
End Sub

にあったとします。
(このマクロが入っているExcelファイル名:Book1.xls)

これを、コマンドラインから呼び出すには?




■VBスクリプトを使って呼び出す

以下のようなVBスクリプトを用意します。

Dim oApp

Set oApp = CreateObject("Excel.Application")

'  Excelは非表示にする
oApp.Visible = False

'引数のチェック、ファイルを開く
Set WshArguments = WScript.Arguments
Set WshNamed = WshArguments.Named

If WshNamed.Exists("file") Then
   oApp.Workbooks.Open WshNamed("file") 'ファイルを開く
   oApp.Run "testmsg" , WshNamed("outfname"),WshNamed("msg")
End If

これを、いま、test.vbsというファイル名で保存したとします。




■コマンドラインからVBスクリプト呼び出し

そして、コマンドラインから、

test.vbs /file:¥temp¥book1.xls /outfname:¥temp¥kekka.txt /msg:123
(¥は、本当は半角)

とやるとtempフォルダの下のbook1.xlsのマクロを実行して、kekka.txtを書き出します
(内容は123)

書き出しているとき、Excelは表示されません。

これでできました。
めでたしめでたし。

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 「ブログの画像からカメラ携... | トップ | 開発の初めから順番に書いて... »
最新の画像もっと見る

Officeソフト&VBA」カテゴリの最新記事