2016-10-04 1 views
0

병합 된 셀을 병합 해제하고 Excel에서 반복하는 VBA 매크로가 있지만 Excel을 열지 않고이 매크로를 실행해야하며 동일한 논리가 여러 Excel에도 적용됩니다. vba를 호출하고 Excel에서 폴더에 적용하는 배치 파일이 필요합니다. 그것을 할 수있는 방법이 있습니까?박쥐 파일에서 VBA 매크로 호출

+3

가능한 중복 http://stackoverflow.com/questions/2050505/way-to-run -excel-macros-from-command-line-or-batch-file) –

+0

당신이 말하는 것은 xlsx가 "MyMacro"매크로에 매크로가 있어야한다는 것입니다. 이제 배치 파일을 호출하면 xlsx가 열립니다 매크로를 실행 한 다음 닫으면됩니다. – Maharaj

+0

예. 병합되지 않은 프로세스를 적용하고 기술을 적용하기 위해 폴더에 다른 Excel 통합 문서를 열 수있는 매크로를 작성할 수 있습니다. 귀하의 질문에 '통합 문서 A에서 실행중인 매크로에서 통합 문서 B의 셀을 병합 해제하려면 어떻게해야합니까?'라는 질문을 다시 질문 할 수 있습니다. –

답변

0

당신은 (루프) 배치 파일에서이 VBScript를 호출 할 수 있습니다

사용법 :

CScript를 inject.vbs "C : \ 요한 \ VbaStuff \ 빈 workbook.xlsx" "C : \ 요한 \ VbaStuff \ DummyMacro.bas ""AddDateToA1 "

inject.vbs :

dim oArgs, i, FSO 
dim fileName, macroFileName, functionName 
dim oApplication, oWorkbooks, oWorkbook, oVbProject 
dim oComponents, oModule, fullFunction 

Set oArgs = WScript.Arguments 
For i = 0 to oArgs.Count - 1 
    WScript.Echo "Arg" & i & ": " & oArgs(i) 
Next 
WScript.Echo "" 

if oArgs.Count < 3 then 
    WScript.Echo "Too few arguments" 
    WScript.Quit 
end if 

fileName = oArgs(0) 
macroFileName = oArgs(1) 
functionName = oArgs(2) 

set FSO = CreateObject("Scripting.FileSystemObject") 

if not FSO.FileExists(fileName) then 
    WScript.Echo "Excel file does not exist" 
    WScript.Quit 
end if 

if not FSO.FileExists(macroFileName) then 
    WScript.Echo "Macro file does not exist" 
    WScript.Quit 
end if 

set oApplication = CreateObject("Excel.Application") 

oApplication.DisplayAlerts = False 

WScript.Echo "Injecting in Excel version: " & oApplication.Version 

set oWorkbooks = oApplication.Workbooks 
set oWorkbook = oWorkbooks.Open(fileName) 
WScript.Echo oWorkbook.Name 

set oVbProject = oWorkbook.VBProject 
WScript.Echo oVbProject.Name 

set oComponents = oVbProject.VBComponents 
set oModule = oComponents.Import(macroFileName) 

fullFunction = Trim(oModule.Name & "." & functionName) 
WScript.Echo "Full function: '" & fullFunction & "'" 
oApplication.Run(fullFunction) 
oComponents.Remove(oModule) 

oWorkbook.Save() 
WScript.Echo "Saved changes" 
oWorkbook.Close(False) 

Call oApplication.Quit() 

set oModule = Nothing 
set oComponents = Nothing 
set oVbProject = Nothing 
set oWorkbook = Nothing 
set oWorkbooks = Nothing 
set oApplication = Nothing 
set FSO = Nothing 
완전성에 대한

더미 매크로 :

Attribute VB_Name = "DummyMacro" 
Sub AddDateToA1() 
    Dim oCell As Range 
    Dim sTime As String 

    Set oCell = ThisWorkbook.Sheets(1).Cells(1, 1) 
    sTime = CStr(TimeValue(Now)) 

    oCell.Value = sTime 
    MsgBox "Wrote time " & sTime & " to " & oCell.Address(0, 0, xlA1, 1) 
End Sub 
[? 명령 줄이나 배치 파일에서 엑셀 매크로를 실행하는 방법] (의