How to Launch an Excel macro from command line (Without Worksheet_Open Event)?

后端 未结 5 1244
走了就别回头了
走了就别回头了 2020-12-14 12:17

Is it possible to launch an Excel Macro from command line?

I don\'t want to use the Worksheet_Open event and just open the Excel File.

I need to

相关标签:
5条回答
  • 2020-12-14 12:56

    If you would prefer to code in C# use this template

    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;
       }
    }
    
    0 讨论(0)
  • 2020-12-14 12:57

    I finally created a VB Script and launched it from the command line:

    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 
    
    0 讨论(0)
  • 2020-12-14 13:12

    AutoIt also offers great COM support and has a lot of built-in Excel-controlling functions. You can compile the script to an .EXE and then run it from the command line.

    0 讨论(0)
  • 2020-12-14 13:21

    Use the Windows PowerShell, it has excellent COM interop support.

    I have the workbook c:\TestBeep.xlsm with a macro called "Test". This is my transcript:

    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()
    

    Optionally you can add in $app.Visible = $True to make the window visible.

    0 讨论(0)
  • 2020-12-14 13:21

    Thank you! Mehdi your answer worked for me too with a small adjustment. The line xl.Application.Visible = True was leaving open a zombie/phantom EXCEL.EXE process using up memory (found it through Windows Task Manager). Using xl.Application.Visible = False instead seems to eliminate the zombie.

    0 讨论(0)
提交回复
热议问题