如何从命令行启动Excel宏(没有Worksheet_Open事件)?

时间:2012-06-04 13:11:54

标签: excel vba cmd

是否可以从命令行启动Excel宏?

我不想使用Worksheet_Open事件,只需打开Excel文件。

我需要启动Excel WorkBook中存在的特定宏。

5 个答案:

答案 0 :(得分:13)

使用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以使窗口可见。

答案 1 :(得分:7)

最后我使用了一个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 

答案 2 :(得分:0)

AutoIt还提供了出色的COM支持,并且具有许多内置的Excel控制功能。您可以将脚本编译为.EXE,然后从命令行运行它。

答案 3 :(得分:0)

如果您更喜欢用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;
   }
}

答案 4 :(得分:0)

谢谢! Mehdi你的回答也适合我,只需要一点调整。这条线 any正在使用内存(通过Windows任务管理器找到它)打开一个zombie / phantom EXCEL.EXE进程。使用xl.Application.Visible = True似乎可以消除僵尸。