Как запустить макрос Excel из командной строки (без события открытия листа)?
можно ли запустить макрос Excel из командной строки?
Я не хочу использовать Worksheet_Open
событие и просто откройте файл Excel.
Мне нужно запустить определенный макрос, который существует в книге Excel.
5 ответов
используйте Windows PowerShell, он имеет отличную поддержку com-взаимодействия.
у меня есть книга c:\TestBeep - ... xlsm с макросом под названием "Тест". Вот моя расшифровка:--3-->
PS C:\> $app = New-Object -comobject Excel.Application
PS C:\> $wb = $app.Workbooks.Open("c:\TestBeep.xlsm")
PS C:\> $wb.Name
TestBeep.xlsm
PS C:\> $app.Run("Test")
PS C:\> $app.Quit()
дополнительно вы можете добавить в $app.Visible = $True
чтобы сделать окно видимым.
наконец, я использовал скрипт VB и запустил его из командной строки. Вот мое решение:--2-->
Option Explicit
LaunchMacro
Sub LaunchMacro()
Dim xl
Dim xlBook
Dim sCurPath
sCurPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
Set xl = CreateObject("Excel.application")
Set xlBook = xl.Workbooks.Open(sCurPath & "\MyWorkBook.xlsm", 0, True)
xl.Application.Visible = True
xl.Application.run "MyWorkBook.xlsm!MyModule.MyMacro"
xl.DisplayAlerts = False
xlBook.saved = True
xl.activewindow.close
xl.Quit
Set xlBook = Nothing
Set xl = Nothing
End Sub
AutoIt также предлагает отличную поддержку COM и имеет множество встроенных функций управления Excel. Вы можете скомпилировать скрипт в .Exe и запустите его из командной строки.
Если вы предпочитаете код на C#, используйте этот шаблон
void Main()
{
var oExcelApp = (Microsoft.Office.Interop.Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
try{
//oExcelApp.Visible = true;
var WB = oExcelApp.ActiveWorkbook;
var WS = (Worksheet)WB.ActiveSheet;
((string)((Range)WS.Cells[1,1]).Value).Dump("Cell Value");
oExcelApp.Run("test").Dump("macro");
}
finally{
if(oExcelApp != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcelApp);
oExcelApp = null;
}
}
спасибо! Мехди, твой ответ сработал и для меня с небольшой поправкой. Линия
xl.Application.Visible = True
оставлял открытым зомби / Фантом EXCEL.EXE процесс, используя память (нашел его через Диспетчер задач Windows). Используя xl.Application.Visible = False
вместо этого, кажется, устранить зомби.