出産前後の痔にはご注意!

どなたか教えてください。
マクロを組み込んだEXCELを開いてマクロを実行し、クローズするという一連の動作をジョブに組み込みたいと思っています。
これは可能でしょうか? 
環境はWindowsです。 
EXEファイルなどで実行させるように組み込めるといいのですが、
もし方法があれば教えてください。
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

OLE オートメーションで出来ると思います



言語が何なのかわからないので、
とりあえず vbスクリプトで説明します
他の言語の場合、その言語でOLEオートメーションを
調べてください
他の言語+ EXCEL.Application
で検索すればたいてい出てきます。

事前に C:\ にBook1.xls があるとして
その Book1.xls に Macro1() というマクロがあるとして

以下の手順

メモ帳を開き、下記プログラムをコピペ
ファイル名を、test.vbs として保存
test.vbs をダブルクリックすると
EXCELが立ち上がり、C:\Book1.xls をオープンして
Macro1 マクロをコールします。

Dim exApp
Set exApp = Wscript.CreateObject("Excel.Application")
exApp.Visible = True
exApp.Workbooks.Open ("C:\Book1.xls")
exApp.Run ("Macro1")
exApp.Quit
Set exApp = Nothing

この回答への補足

nak777rさん、ありがとうございます。
正に思っていた事が実現できました。 
質問ついでと言っては何ですが、よろしければもう1点教えてください。
今回実行したいマクロは複数にわかれていて、その中に引数が必要なものがあります。
Sub Macro1
・・・
End Sub

Sub Macro2(a,b,c)
・・・
End Sub
といった感じです。 
これをお教えいただいたvbスクリプトにて
exApp.Run ("Macro1")
exApp.Run ("Macro2")
と記述したところ、
エラー「引数省略はできません」と出てしまいます。

また、exApp.Run ("Macro2(a,b,c)")
と記述すると、
エラー「マクロ'Macro2(a,b,c)'が見つかりません」となってしまいます。
この部分が解決できれば全てうまくいきそうなのですが・・・。
引数指定の記述方法など解決手段がございましたら是非ご教授ください。
よろしくお願い致します。

補足日時:2008/03/27 22:31
    • good
    • 1
この回答へのお礼

ありがとうございます。
正に思っていた事が実現できました。 
感謝感謝です。

お礼日時:2008/03/30 00:16

>エラー「Sub プロシージャを呼び出すときに、かっこを使うことはできません。

」と出ます。 

すみません、自宅に環境が無いので、月曜まで確認できませんが

call exApp.Run ("Macro2",a,b,c)
又は、
exApp.Run "Macro2",a,b,c
と記述してみてください。
    • good
    • 0
この回答へのお礼

exApp.Run ("Macro2"), a, b, c
でうまくいきました。
これで万事解決です。 
この度は大変お世話になりました。
本当に感謝しています。
ありがとうございました。

お礼日時:2008/03/30 00:14

>引数指定の記述方法など解決手段がございましたら是非ご教授ください。



やり方は最後に記述しますが、

その前に、オブジェクトブラウザで確認する方法を覚えてください

EXCELメニュー
[ツール | マクロ | Visual Basic Editor] で EXCEL の Visual Basic Editor を起動

EXCEL の Visual Basic Editor のメニュー
[表示 | オブジェクトブラウザ]

全てのライブラリ
クラス名 の一覧に Application があるのでそれをクリックすると
右側の一覧が、'Application' のメンバの一覧になります

これが、
Set exApp = Wscript.CreateObject("Excel.Application")
で指定した exApp のクラスの内容になります。

たとえば、WorkBook に関して何かしたい場合は、
Application クラス の中に、 Workbooks オブジェクトがいるのがわかると思います
今度は、クラス側で、Workbooks クラスを選択すると、Open メソッド又は Addメソッド
が存在し、Add は、Workbook を追加、Openは、Bookファイルのオープンメソッドとして存在し、
それぞれのメソッドが、 Workbook を返すメソッドである事は
オブジェクトブラウザの下段にある Function Add([Template]) As Workbook という記載を
見ればわかります。
今度は、Workbook のクラスを選択すると、Workbookのメンバーの中に Worksheets のメソッド
がある事がわかる・・・と言う風に、クラスの階層わかると思います。
まず、このオブジェクトライブラリの使い方を覚えてください。


で、'Application' の メンバ の一覧の中に Run メソッドがあるので、
それをクリックして、F1キーで Run メソッドのヘルプが表示されます。
その、使用例を見るとわかると思いますが、
exApp.Run ("Macro2",a,b,c)
となります。

この回答への補足

詳細な説明ありがとうございます。 
非常によくわかりました。
ただ、その通り定義しているにも拘らずコンパイルエラーになってしまいます。
エラー「Sub プロシージャを呼び出すときに、かっこを使うことはできません。」と出ます。 
教えていただいたヘルプの内容を見ながら","の後の空白を調整してみたりしましたがダメでした。 
何が悪いのでしょうか? 変数は使えないとかありますか?  

補足日時:2008/03/28 21:53
    • good
    • 0

バージョンがわからないのですが、昔のEXCELではファイルを開いた時にマクロを自動的に起動することができましたが、2000からは改編されてできないようになっています。


これは当時騒がれたマクロウィルス対策のためです。

現在はマクロを実行する時は「実行ボタン」あるいはマクロ実行呼び出し関数を組み込んでそれを実行することで実行することが必要になります。クローズするというのはエクセル自体をクローズさせることであれば、可能です。

マクロ自体をEXEファイルで実行する事は私も聞いたことがありません。もし、行うとしたら、VisualBasic等でプログラムを作成して、外部からEXCELを操作するといった方法になると思います。
特定のワークブックに組み込んで、そのプログラムを実行する呼び出す形は可能です。

不特定のワークシートに対して、一連の共通したファイル操作を行う事はオブジェクト関数によってシートの値の取得が可能です。
関数についてはVBAのリファレンスマニュアルを参考にしてください。
工夫次第ではかなり楽になりますので頑張ってください。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

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

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

Aベストアンサー

こんにちは。

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

こんにちは。

Perl 自体は、また別というか、Wscript.Run で呼び出してもよいと思いますが、
WScript でも、Perl の複雑な処理にはかないませんが、正規表現も持っていますから、多少は似たようなマネが出来ます。

バッチプログラムと違うのは、まず、フォルダを探すことが可能だということと、フォルダを選択する、ダイアログが使えるということです。

個別のファイルのファイルの移動なら、

Const myPATH ="C:\My Documents\

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objF...続きを読む

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QvbsからのExcelマクロ呼び出しの際に保存ダイアログが表示されてしまう

vbsからExcelのマクロを呼び出しExcelを閉じる処理を以下のように実施しています。
その際に保存ダイアログが表示されてしまうため非表示としようとコメントアウトされている
ように変更しました。
そしたらダイアログは表示されなくなりましたがstrTextの値が返却されなくなってしまいました。
原因がよくわからないのですがわかりましたらご教授ください。

Set oApp = CreateObject("Excel.Application")
oApp.Workbooks.Open WScript.Arguments(0)

strText = oApp.Run("CheckText")

oApp.DisplayAlerts = False
'oApp.Workbooks.Close saveChanges:=False
oApp.Workbooks.Close

Set oApp = Nothing
WScript.echo(strText)

Aベストアンサー

こんばんは。

単体でファイルを開けたら、単体でファイルを閉じればいいのでは?
その時に、ファイル変更のSaved =False は、初めて通用するはずです。
後は、CheckText の内容ですが、CheckTextの戻り値が、
strText に入っているかの確認はしていません。

できれば、On Error Resume Next を入れておいたほうが無難だと
は思いますが……。

一例:
'-------------------------------------
Set oApp = CreateObject("Excel.Application")
Set xlWb =oApp.Workbooks.Open(WScript.Arguments(0))
strText = oApp.Run("CheckText")
xlWb.Close False
Set oApp = Nothing
WScript.echo(strText)
'-------------------------------------

こんばんは。

単体でファイルを開けたら、単体でファイルを閉じればいいのでは?
その時に、ファイル変更のSaved =False は、初めて通用するはずです。
後は、CheckText の内容ですが、CheckTextの戻り値が、
strText に入っているかの確認はしていません。

できれば、On Error Resume Next を入れておいたほうが無難だと
は思いますが……。

一例:
'-------------------------------------
Set oApp = CreateObject("Excel.Application")
Set xlWb =oApp.Workbooks.Open(WScript.Arguments(0))
s...続きを読む

QVBScriptからEXCELのVBAコマンドを実行するには?

VBScriptからEXCELのVBAコマンドを実行するにはどうしたら良いでしょう?

例)
Set P_OBJEXCEL = CreateObject("Excel.Application")
※ここで EXCEL VBA の Chdir "N:\"を行いたい
W_INFILE = P_OBJEXCEL.Application.GetOpenFilename("EXCEL(*csv),*.csv",,"入力ファイル")
P_OBJEXCEL.Application.Quit

環境→EXCEL2000+Windows2000+IE6
目的→入力ファイルを取得ため、N:\配下をGetOpenFileNameにて開きたい
※EXCELのデフォルトパスを変更したくないため

何かヒントを御願いします

Aベストアンサー

> 目的→入力ファイルを取得ため、N:\配下をGetOpenFileNameにて開きたい

ファイル名の取得だけなら、こういうのじゃダメですか?
Excel で開くなら、この後で Workbooks.Open で開けば良いですし。。

なお、字下げは全角SPでしてますので、実際にテストするときは、
タブに置換して下さい。

With CreateObject("MSComDlg.CommonDialog")
  '.CancelError = True
  .MaxFileSize = 256
  .InitDir = "N:\"
  .DialogTitle = "ファイルを開く"
  .Filter = "TEXT (*.csv)|*.csv|すべてのファイル (*.*)|*.*"
  .ShowOpen
  MsgBox .FileName
End With

あと、

> ※EXCELのデフォルトパスを変更したくないため

この意味が良くわからないです。

QExcelマクロを引数付で起動

VB.NET2002を使用しています。

VBよりEXCELマクロを実行できるとこまでは出来たのですが、
excel.Application.Run("Module1!test")
VBで処理した値をExcelに渡すことはできないのでしょうか?

Run("マクロ名",引数1,引数2,・・・)のように宣言すれば良さそうなのですが、 型のエラーが出てしまいます。

VB上の吹き出しには「As Object」とあるのですが、実際には文字列(string)や数字(long)です。

そのままRun("test",moji,suuji)のようには無理でしょうか。

ちなみにExcelの受け側ですが、
test(byval moji as string,byval num as integer)
のようにすれば…と思っていたのですが。

ご存知の方がいらっしゃいましたら教えてください。
お願いいたします。

Aベストアンサー

こんにちは。

>excel.Application.Run("Module1!test")

excel.Application.Run("Book1.xls!test")
これは、直していただくとして、

Dim moji As String
Dim num As Int32 '型は違ってはいますが……

excel.Run("Book1.xls!test", moji, num)

で、特に問題ないと思いますが、逆なら、Excel側から型のエラーが出てしまうでしょうね。
たとえば、以下のように、Excel側の文字と数値の引数が、逆になっていると間違えますね。

Book1.xls!Test
Function test(ByVal moji As String, ByVal num As Integer)
 test = String$(num, moji)
End Function

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QVBA(エクセル)で自動的にボタンをクリックさせるには

いつもお世話になっております。
下記のことがしたいのですがどうやって良いのかがわからなくって困っております。

やりたいこと。
AブックとBブックが有るとします。(双方ともエクセルファイル)
エクセルのVBAで、Aブックのシート上のコマンドボタンを押すと
Bブックのシート上のコマンドボタンをクリックするという動きを
VBAでさせたいのですがどうしてもクリックさせることができません。

試したこと。
初めは、AのボタンをクリックするとBのボタンをセレクトして
SendKeysでENTERを送ってみたりしたのですがうまくいきませんでした。

何かやり方が有りましたら、お教えいただけませんでしょう。
宜しくお願いいたします。

Aベストアンサー

Privateスコープを変更しない場合、Application.Runメソッドを使う手もあります。
Application.Run "'C:\Book1.xls'!Sheet1.CommandButton1_Click"
※『Sheet1』の部分はシートモジュールのオブジェクト名になります。

ですが、Bブックのボタン_Clickの中味を標準モジュールに置いて、
AブックのボタンとBブックのボタンと、両方から実行できるようにしておくほうが良いような気もしますね。

(コマンドボタンが[フォーム]ボタンの事だったら、同じマクロを[マクロの登録]するだけの話?)

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QEXCELマクロで上書きメッセージ無しで保存する方法

EXCELマクロで上書きメッセージ無しで保存する方法をお願いします
ActiveWorkbook.SaveAs "C:\Documents andSettings\Nakatani\MyDocuments\Book1.xls"
の様にするとすでにファイルがある場合上書きメッセージが出ます
メッセージを出さずに上書きするプログラミングを教えて下さい
宜しくお願いします

Aベストアンサー

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs "C:\Documents andSettings\Nakatani\MyDocuments\Book1.xls"
Application.DisplayAlerts = True


人気Q&Aランキング