2012-04-19 4 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 

를 사용하려고 그리고있어 스크립트는 내가 접근에 노력하고있어 매크로입니다 : 내가 Is it possible to run a macro in Excel from external command?에있는 솔루션은 여기까지를 얻기 위해 노력

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 

(수정 물론) 작동하지 않는 것 같았다. Microsoft Office Excel : 매크로 'Macro.TestMacro'를 찾을 수 없습니다.

편집 : Excel 2003.

+1

당신이 제거하려고 했나 "매크로." 및/또는 괄호를 사용하고 objExcel.Application.Run "TestMacro"와 같이 호출하십시오. – deusxmach1na

+0

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

+0

둘 다 작동하지 않습니다. ( – muttley91

답변

22

좋아, 실제로는 간단합니다. 시트 중 하나가 아닌, 매크로는 모듈에 있다고 가정하면, 당신이 사용

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

모듈에 있어야한다는 것을 깨닫지 못했습니다. 또한 통합 문서에있었습니다. 내가 시트 중 하나에 그것을두면 두 번째 부분을 시도했다). 감사! – 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를 실행이 코드 개인 통합 문서에서 Excel 파일을 열 때 VBScript가 열리지 않아 PERSONAL.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 

그래서 루프의 시작 부분에이 personals.xlsb을 여는 다른 모든 통합 문서 거기에서 매크로를 실행

. 그냥 내가 여기에 게시해야한다고 생각했는데, 누군가가 이처럼 가로 질러 달려들지 만, 왜 매크로가 여전히 실행되지 않는지 파악할 수 없다.

4

나는 open_form 매크로를 실행하기 위해 @ Siddhart의 코드를 상대 경로에 적용하려고 시도했지만 작동하지 않았다. 여기에 첫 번째 시도가있었습니다. 내 작업 솔루션은 아래와 같습니다.

문제 내가 직면했다 :

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." 

편집

는 사실은 누군가가 정의 폼을 실행하고자하는 경우에 대비, "모두"독립 실행 형 응용 프로그램을 밖으로 일했다

1 - 엑셀이 읽기 전용으로 잠겨있어 Workbook_Open 이벤트를 사용하고 싶지 않았습니다. 2 - batch 명령은 (필자에게) 매크로를 호출 할 수 없다는 사실이 제한되어 있습니다.

은 내가 먼저 쓴 응용 프로그램을 숨기고 내 사용자 정의 폼을 실행하는 매크로 : 다음이 매크로 실행하기 위해 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 

참고 어쨌든

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

안녕이를 얻기 위해이 스레드를 사용해야하는 경우이 도움이되기를 바랍니다 : 나는 또한 Userform_QueryClose 내에서 "다시 볼 수에 설정"을 포함했다 해결책을 찾은 다음 누군가가 사용할 수 있도록하기 위해 내가 한 일을 공유하고 싶습니다. 내가 원하는 무엇

약간의 세포를 변경하고 일부 행을 삭제하는 매크로를 호출했다,하지만 난 (약 각 파일에 대해 3 minuts을 보냈다) 1500 개 이상의 탁월합니다

주로 문제에 대한 필요 : - 언제를 호출 VB에서 매크로, 나는 같은 문제가있어 PERSONAL.XLSB에서 매크로를 호출 할 수 없었습니다. 스크립트가 Excel.exe를 실행하지 못했을 때 personal.xlsb를 실행하고 매크로 창에서 아무 옵션도 사용하지 않았습니다.

스크립트를 실행하기 전에로드 된 매크로 (a.xlsm)를 사용하여 Excel 파일 하나를 엽니 다.

그런 다음 내가 스크립트

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 엑셀에서 매크로를 호출 나는 위의 방법을 시도했지만 나는 "매크로를 찾을 수 없습니다"오류가 발생했습니다. 이것이 마지막 코드입니다.

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

감사합니다! "Import Add-Ins"섹션은 언제 필요합니까? – DAE

1

"매크로를 찾을 수 없거나 사용 불가능 함"오류를 처리하는 방법을 검색하여 하루 종일 죽인 후에 관련된 관련 질문이 삭제 된 이후로 여기에서 유일한 구문을 게시했습니다 (application.run didn ' 내가 노력 상관없이 t)

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

관련 문제