명령줄에서 VBScript를 사용하여 Outside Excel에서 Excel 매크로 실행
엑셀 파일 외부에서 엑셀 매크로를 실행하려고 합니다.현재 명령줄에서 실행 중인 .vbs 파일을 사용하고 있는데 매크로를 찾을 수 없다는 메시지가 계속 나타납니다.여기 제가 사용하려는 스크립트가 있습니다.
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
외부 명령에서 Excel 매크로 실행이 가능합니까?에 있는 솔루션을 사용해 보았습니다.(물론 수정도 가능하지만) 효과가 없는 것 같습니다.Microsoft Office Excel:매크로 '매크로'TestMacro'를 찾을 수 없습니다.
편집: Excel 2003.
좋아, 사실 간단해.매크로가 시트 중 하나가 아닌 모듈 안에 있다고 가정하면 다음을 사용합니다.
objExcel.Application.Run "test.xls!dog"
'notice the format of 'workbook name'!macro
공백이 있는 파일명의 경우는, 파일명을 따옴표로 묶습니다.
예를 들어 sheet1과 같이 매크로를 시트 아래에 배치한 경우에는 sheet1이 기능을 소유하고 있다고 가정합니다.
objExcel.Application.Run "'test 2.xls'!sheet1.dog"
주의: 사용 중인 macro.test 함수 표기법은 필요하지 않습니다.
이 코드는 Test.xls 파일을 열고 매크로를 실행합니다.TestMacro
텍스트 파일에 쓸 수 있습니다.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
하루 종일 "macro not found or disabled" 오류를 해결하는 방법을 검색한 결과 관련 질문이 올바른 손에 의해 삭제되었기 때문에, 나에게 맞는 구문은 여기에 게시되었습니다(어플리케이션.run은 아무리 해도 실행되지 않았습니다).
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"
Excel 2010, Windows 7
@Siddhart의 코드를 상대 경로로 수정하여 실행하려고 했습니다.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."
편집
다른 사용자가 독립 실행형 애플리케이션을 "유사"로 실행하려는 경우를 대비해서 실제로 해결했습니다.
당면한 문제:
1 - Excel이 읽기 전용으로 잠겨 있기 때문에 Workbook_Open Event를 사용하고 싶지 않았습니다.2 - batch 명령어는 매크로를 호출할 수 없는 것이 한정되어 있습니다.
처음에 매크로를 작성하여 응용 프로그램을 숨긴 상태에서 사용자 폼을 실행합니다.
Sub open_form()
Application.Visible = False
frmAddClient.Show vbModeless
End Sub
그런 다음 vbs를 생성하여 이 매크로를 실행합니다(상대 경로를 사용하여 실행하는 것은 까다로웠습니다).
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
또한 "Set back to visible"도 포함되었습니다.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
어쨌든, 당신의 도움에 감사드리며, 만약 누군가가 도움이 필요하다면 도움이 되길 바랍니다.
위의 방법을 시도했지만 "macro cannot be find" 오류가 발생했습니다.이게 작동한 마지막 코드야!
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이 됩니다.마이마크로
는 보통 를 반반 my my my에 저장합니다.xlam
워크북과는 별도로 추가 기능을 사용하기 때문에 워크북을 열고 별도로 저장된 매크로를 실행하려고 했습니다.
VBS 스크립트가 필요하기 때문에 인수 전달을 통해 사용할 수 있도록 "휴대용"으로 만들고 싶었습니다.다음은 3개의 인수를 포함하는 마지막 스크립트입니다.
- 워크북의 전체 경로
- 매크로명
- [옵션] 매크로를 사용하여 워크북을 분리하는 경로
다음과 같이 테스트했습니다.
"C:\Temp\runmacro.vbs" "C:\Temp\Book1.xlam" "Hello"
"C:\Temp\runmacro.vbs" "C:\Temp\Book1.xlsx" "Hello" "%AppData%\Microsoft\Excel\XLSTART\Book1.xlam"
runmacro.vbs:
Set args = Wscript.Arguments
ws = WScript.Arguments.Item(0)
macro = WScript.Arguments.Item(1)
If wscript.arguments.count > 2 Then
macrowb= WScript.Arguments.Item(2)
End If
LaunchMacro
Sub LaunchMacro()
Dim xl
Dim xlBook
Set xl = CreateObject("Excel.application")
Set xlBook = xl.Workbooks.Open(ws, 0, True)
If wscript.arguments.count > 2 Then
Set macrowb= xl.Workbooks.Open(macrowb, 0, True)
End If
'xl.Application.Visible = True ' Show Excel Window
xl.Application.run macro
'xl.DisplayAlerts = False ' suppress prompts and alert messages while a macro is running
'xlBook.saved = True ' suppresses the Save Changes prompt when you close a workbook
'xl.activewindow.close
xl.Quit
End Sub
퍼스널 워크북에서 매크로를 실행하려고 하면 VBScript를 사용하여 Excel 파일을 열어도 퍼스널.X가 자동으로 열리지 않기 때문에 동작하지 않을 수 있습니다.LSB. 다음과 같은 작업을 수행해야 합니다.
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
그래서 루프의 시작은 개인을 여는 것입니다.xlsb 및 다른 모든 워크북에 대해 매크로를 실행합니다.누군가 나처럼 이걸 우연히 발견했을 때를 대비해서 여기에 글을 올려야겠다고 생각했는데 왜 아직도 매크로가 실행되지 않는지 모르겠어.
안녕하세요, 이 스레드를 사용하여 솔루션을 입수했습니다.누군가 사용할 수 있는 경우를 대비해 제가 한 일을 공유하고 싶습니다.
셀을 변경하고 행을 지우는 매크로라고 부르고 싶었지만 1500 엑셀(파일당 약 3분 소요) 이상 필요했습니다.
주요 문제: - vbe에서 매크로를 호출할 때도 같은 문제가 발생했는데, 개인에서 매크로를 호출할 수 없었습니다.XLSB, 스크립트가 억제를 했을 때 엑셀은 개인적으로 실행되지 않았습니다.xlsb 및 매크로 창의 옵션 없음
매크로가 로드된 상태로 엑셀 파일 하나를 열어두면 해결(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
언급URL : https://stackoverflow.com/questions/10232150/run-excel-macro-from-outside-excel-using-vbscript-from-command-line
'programing' 카테고리의 다른 글
목표 C에 #import와 #include의 차이점은 무엇입니까? (0) | 2023.04.15 |
---|---|
Python의 목록에 해당하는 사전 키 값 반복 (0) | 2023.04.15 |
테이블에서 필터 지우기 (0) | 2023.04.15 |
Swift에서 Arg 수가 가변인 함수에 배열 전달 (0) | 2023.04.15 |
코드에서 동적 리소스 스타일을 할당하려면 어떻게 해야 합니까? (0) | 2023.04.15 |