2012-04-19 48 views
23

Excelファイルの外部からExcelマクロを実行しようとしています。私は現在、コマンドラインから実行される ".vbs"ファイルを使用していますが、マクロが見つからないことを伝え続けます。ここで私は外部ExcelからExcelマクロをコマンドラインからVBScriptを使用して実行

Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open("test.xls") 

objExcel.Application.Visible = True 
objExcel.Workbooks.Add 
objExcel.Cells(1, 1).Value = "Test value" 

objExcel.Application.Run "Macro.TestMacro()" 
objExcel.ActiveWorkbook.Close 


objExcel.Application.Quit 
WScript.Echo "Finished." 
WScript.Quit 

とここを使用しようとしているスクリプトは、私がアクセスしようとしているマクロです:

Sub TestMacro() 
'first set a string which contains the path to the file you want to create. 
'this example creates one and stores it in the root directory 
MyFile = "C:\Users\username\Desktop\" & "TestResult.txt" 
'set and open file for output 
fnum = FreeFile() 
Open MyFile For Output As fnum 
'write project info and then a blank line. Note the comma is required 
Write #fnum, "I wrote this" 
Write #fnum, 
'use Print when you want the string without quotation marks 
Print #fnum, "I printed this" 
Close #fnum 
End Sub 

私はこれまでのところ(と修正を取得するためにIs it possible to run a macro in Excel from external command?に位置ソリューションを試してみましたもちろん)それは動作するように見えませんでした。 Microsoft Office Excel:マクロ 'Macro.TestMacro'が見つかりません。

EDIT:Excel 2003.

+1

あなたが削除してみなかった "マクロを。"および/または括弧で囲み、これをobjExcel.Application.Run "TestMacro"のように呼び出すだけですか? – deusxmach1na

+0

objExcel.Application.Run "test.xls!Macro.TestMacro" –

+0

これらはどちらもうまくいきません:( – muttley91

答えて

22

これは実際には簡単です。シートの1つでない、マクロはモジュール内にあると仮定すると、あなたが使用します。

objExcel.Application.Run "test.xls!dog" 
    'notice the format of 'workbook name'!macro 

をスペースで、ファイル名の場合は、引用符でファイル名を包みます。

シートの下にマクロを配置した場合、sheet1と言うと、sheet1はその機能を所有していると仮定します。

objExcel.Application.Run "'test 2.xls'!sheet1.dog" 

注意:使用しているmacro.testfunction表記は必要ありません。

+0

私はそれがモジュール内になければならなかったことを認識していませんでした。私がシートの1つに残しておけば、2番目の部分を試しました)。ありがとう! – muttley91

20

私はあなたがこれをやろうとしていると思いますか? (をしようとしたをテストしました)

ファイルTest.xlsとを開いて、テキストファイルTestResult.txt

Option Explicit 

Dim xlApp, xlBook 

Set xlApp = CreateObject("Excel.Application") 
'~~> Change Path here 
Set xlBook = xlApp.Workbooks.Open("C:\Test.xls", 0, True) 
xlApp.Run "TestMacro" 
xlBook.Close 
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 

WScript.Echo "Finished." 
WScript.Quit 
0

にターンの書き込みにマクロを実行しようとしているだろう場合は、マクロTestMacroを実行します。このコード個人ブックからVBScriptでExcelファイルを開くとPERSONAL.XLSBが自動的に開かないため、動作しない可能性があります。それはpersonals.xlsbを開き、他のすべてのワークブックのためにそこからマクロを実行しているループの最初にそう

Dim oFSO 
Dim oShell, oExcel, oFile, oSheet 
Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set oShell = CreateObject("WScript.Shell") 
Set oExcel = CreateObject("Excel.Application") 
Set wb2 = oExcel.Workbooks.Open("C:\..\PERSONAL.XLSB") 'Specify foldername here 

oExcel.DisplayAlerts = False 


For Each oFile In oFSO.GetFolder("C:\Location\").Files 
    If LCase(oFSO.GetExtensionName(oFile)) = "xlsx" Then 
     With oExcel.Workbooks.Open(oFile, 0, True, , , , True, , , , False, , False) 



      oExcel.Run wb2.Name & "!modForm" 


      For Each oSheet In .Worksheets 



       oSheet.SaveAs "C:\test\" & oFile.Name & "." & oSheet.Name & ".txt", 6 


      Next 
      .Close False, , False 
     End With 
    End If 



Next 
oExcel.Quit 
oShell.Popup "Conversion complete", 10 

:あなたはこのような何かをする必要があります。ちょうど私がここに投稿する必要があると思ったのは、誰かがこのように横断して実行したような場合です。しかし、マクロがまだ実行されていない理由を理解できません。

4

open_formマクロを実行するために@シッドハルトのコードを相対パスに適用しようとしましたが、動作していないようです。ここに私の最初の試みがあった。私の働く解決策は以下の通りです。

Option Explicit 

Dim xlApp, xlBook 
dim fso 
dim curDir 
set fso = CreateObject("Scripting.FileSystemObject") 
curDir = fso.GetAbsolutePathName(".") 
set fso = nothing 

Set xlApp = CreateObject("Excel.Application") 
'~~> Change Path here 
Set xlBook = xlApp.Workbooks.Open(curDir & "Excels\CLIENTES.xlsb", 0, true) 
xlApp.Run "open_form" 
xlBook.Close 
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 

WScript.Echo "Finished." 

私は実際に誰かが「似」スタンドアローンアプリケーションをユーザーフォームを実行したいだけの場合には、それを働いているEDIT

:私は直面していた

問題:

1 - エクセルが読み取り専用でロックされているため、Workbook_Openイベントを使用したくありませんでした。 2 - バッチコマンドは、私の知る限り、マクロを呼び出せないという事実に制限されています。

は、私が最初に書いたアプリケーション隠しながら、私のユーザーフォームを起動するマクロ:私は、このマクロを起動するためにVBSを作成

Sub open_form() 
Application.Visible = False 
frmAddClient.Show vbModeless 
End Sub 

(相対パスでそれをやってトリッキーされている):

dim fso 
dim curDir 
dim WinScriptHost 
set fso = CreateObject("Scripting.FileSystemObject") 
curDir = fso.GetAbsolutePathName(".") 
set fso = nothing 

Set xlObj = CreateObject("Excel.application") 
xlObj.Workbooks.Open curDir & "\Excels\CLIENTES.xlsb" 
xlObj.Run "open_form" 

そして、私は最終的にVBSを実行するバッチファイルをしました...

@echo off 
pushd %~dp0 
cscript Add_Client.vbs 

。なお、私も私のUserform_QueryCloseに「戻って見えるの設定」が含まれている:誰かがそれを必要とする場合、とにかく

Private Sub cmdClose_Click() 
Unload Me 
End Sub 

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    ThisWorkbook.Close SaveChanges:=True 
    Application.Visible = True 
    Application.Quit 
End Sub 

あなたの助けに感謝し、私はこれが役立つことを願っています

+0

最終的に解決策を見つけたことは素晴らしいことですが、この回答の最初のバージョンは答えではなかったことを知っておく必要があります。将来、質問は回答ではなく質問として投稿してください。 [サイトの紹介をもう一度行ってください](http://stackoverflow.com/tour)。 – Charles

0

こんにちは得るために、このスレッドを使用解決策を見つけたら、誰かがそれを使うことができるように私がしたことを分かち合いたいと思います。私が望んで

は、いくつかのセルを変更し、いくつかの行を消去マクロを呼び出すことでしたが、私は(約ファイルごとに3分前に費やした)1500の以上の優れ

主な問題のために必要: -when呼び出します私は同じ問題を抱えていました。PERSONAL.XLSBからマクロを呼び出すことは不可能でした。スクリプトがExcelを無視して、personal.xlsbを実行していませんでした。

私は、マクロをロードしたExcelファイルを開く(a.xlsm)(スクリプトを実行する前に)

は、その後、私はスクリプト

Option Explicit 
    Dim xl 
    Dim counter 

    counter =10 



    Do 

    counter = counter + 1 

    Set xl = GetObject(, "Excel.Application") 
    xl.Application.Workbooks.open "C:\pruebas\macroxavi\IA_030-08-026" & counter & ".xlsx" 
    xl.Application.Visible = True 
    xl.Application.run "'a.xlsm'!eraserow" 
    Set xl = Nothing 


    Loop Until counter = 517 

    WScript.Echo "Finished." 
    WScript.Quit 
2

によってoppened Excelからマクロを呼び出す私は、上記の方法を試してみましたが、私は、「マクロが見つからない」エラーを得ました。 これは機能した最終コードです!

Option Explicit 

Dim xlApp, xlBook 

Set xlApp = CreateObject("Excel.Application") 
xlApp.Visible = True 

    ' Import Add-Ins 
xlApp.Workbooks.Open "C:\<pathOfXlaFile>\MyMacro.xla" 
xlApp.AddIns("MyMacro").Installed = True 

' 
Open Excel workbook 
Set xlBook = xlApp.Workbooks.Open("<pathOfXlsFile>\MyExcel.xls", 0, True) 

' Run Macro 
xlApp.Run "Sheet1.MyMacro" 

xlBook.Close 
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 

WScript.Quit 

私の場合、MyMacroはSheet1の下にあるため、Sheet1.MyMacroとなります。

+0

ありがとう! 「アドインのインポート」セクションはいつ必要ですか? – DAE

1

「マクロが見つかりませんでした」または「無効になっています」というエラーをどのように克服するかを検索して一日を殺した後、私の関連する質問が正義の手によって削除されたので、ここで私のために働く唯一の構文(application.run didn '私が試しに関係なく何トン、)

Set objExcel = CreateObject("Excel.Application") 

' Didn't run this way from the Modules 
'objExcel.Application.Run "c:\app\Book1.xlsm!Sub1" 
' Didn't run this way either from the Sheet 
'objExcel.Application.Run "c:\app\Book1.xlsm!Sheet1.Sub1" 
' Nor did it run from a named Sheet 
'objExcel.Application.Run "c:\app\Book1.xlsm!Named_Sheet.Sub1" 

' Only ran like this (from the Module1) 

Set objWorkbook = objExcel.Workbooks.Open("c:\app\Book1.xlsm") 
objExcel.Run "Sub1" 

エクセル2010、勝利7

関連する問題