如何从命令行启动Excel宏?
我不想使用Worksheet_Open
事件,只是打开Excel文件。
我需要启动Excel工作簿中的特定宏。
使用Windows PowerShell,它具有出色的COM互操作支持。
我有一个名为“Test”的宏的工作簿c:\TestBeep.xlsm。这是我的记录:
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脚本,并从命令行启动它:
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
Saved
属性,但它并不保存文件。请改用Save
方法来保存文件。 - Rachel Hettingerxl.Application.Visible = True
这行代码会留下一个僵尸/幽灵EXCEL.EXE进程占用内存(通过Windows任务管理器发现)。改为使用xl.Application.Visible = False
似乎可以消除这个僵尸进程。 - Eatsvoid 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;
}
}
VBS
制作类似批处理文件的东西?我从未使用过它,你能否给我一个示例来启动MyExcelFile.xlsm
中的MyMacro
? - Mehdi