Вопрос по vba, excel – Как запустить макрос Excel из командной строки (без события Worksheet_Open)?

7

Можно ли запустить макрос Excel из командной строки?

Я не хочу использоватьWorksheet_Open событие и просто откройте файл Excel.

Мне нужно запустить определенный макрос, который существует в Excel WorkBook.

Надеюсь это поможет?stackoverflow.com/questions/2050505/… Siddharth Rout
Я согласен с brettdj. Используйте VBS. Если вы хотите запустить из командной строки, вам придется написать командный файл и использоватьWorksheet_Open событие. Siddharth Rout
Можно ли сделать что-то вроде командного файла, используяVBS ? Я никогда не использовал его, не могли бы вы дать мне пример для запускаMyMacro вMyExcelFile.xlsm ? M3HD1
Также см. Этот примерstackoverflow.com/questions/10530299/… Siddharth Rout
Я предлагаю вам использоватьvbs вместо. Вы можете автоматизировать Excel через скрипт brettdj

Ваш Ответ

5   ответов
0

AutoIt также предлагает отличную поддержку COM и имеет множество встроенных функций управления Excel. Вы можете скомпилировать скрипт в .EXE, а затем запустить его из командной строки.

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;
   }
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded M3HD1
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 
Error: User Rate Limit ExceededHow to Answer
Error: User Rate Limit Exceeded M3HD1
Error: User Rate Limit ExceededSavedError: User Rate Limit ExceededSaveError: User Rate Limit Exceeded
0

Спасибо! Мехди, твой ответ сработал для меня тоже с небольшой поправкой Линия xl.Application.Visible = True оставлял открытым процесс EXCEL.EXE с использованием зомби / фантома, занимая память (нашел его через диспетчер задач Windows). С помощьюxl.Application.Visible = False вместо этого, кажется, устранить зомби.

13

Используйте Windows PowerShell, он имеет отличную поддержку взаимодействия COM.

У меня есть книга c: \ TestBeep.xlsm с макросом под названием «Test». Это моя стенограмма:

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 сделать окно видимым.

Error: User Rate Limit Exceeded M3HD1

Похожие вопросы