如何从命令行启动Excel宏(无工作表打开事件)?

如何从命令行启动Excel宏(无工作表打开事件)?,excel,vba,cmd,Excel,Vba,Cmd,是否可以从命令行启动Excel宏 我不想使用工作表\u 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:\Tes

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

我不想使用
工作表\u 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
以使窗口可见。

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

我最终创建了一个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 

如果您希望使用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;
   }
}

谢谢大家!!Mehdi你的回答对我来说也很有用,只是做了一点小小的调整。线路
xl.Application.Visible=True
正在使用内存(通过Windows任务管理器找到)打开一个僵尸/幻影EXCEL.EXE进程。改用
xl.Application.Visible=False似乎可以消除僵尸。

我建议您改用一个。您可以通过脚本自动化Excel我同意brettdj。使用vbs。如果要从命令行运行,则必须编写一个批处理文件并使用
工作表_Open
事件。是否可以使用
VBS
生成类似批处理文件的内容?我从来没用过它,你能给我举个例子,在
MyExcelFile.xlsm
中启动
MyMacro
吗?希望这有帮助?还可以看到这个示例,谢谢,但我不确定用户是否安装了PowerShell。。。我最终使用了一个VB脚本,并从命令行启动它。请考虑接受此脚本,以便其他人知道您的问题已得到解决。是的,但由于这是我自己的答案,我应该等待24小时:)请注意,虽然您可以设置
Saved
属性,但它不会保存文件。改为使用
Save
方法。你知道如何将其推广到任何代码中吗?不知道@Lime我不知道。不幸的是,不可能使用C#!唯一可能的选择是Sheel脚本。。。无论如何谢谢你!但我不能测试你的解决方案…没问题,我看到这个问题很老了。我一直在寻找这个功能,我想为将来可能会发现它有用的其他人提供一种在C#中实现它的方法。