Способ выполнить макросы Excel из командной строки или пакетного файла?

У меня есть макрос Excel VBA, который я должен выполнить при доступе к файлу от пакетного файла, но не каждый раз я открываю его (следовательно не использование открытого события файла). Существует ли способ выполнить макрос из командной строки или пакетного файла? Я не знаком с такой командой.

Примите среду Windows NT.

72
задан PGSystemTester 12 July 2019 в 03:26
поделиться

4 ответа

Вы можете запустить Excel, открыть рабочую книгу и запустить макрос из файла VBScript.

Скопируйте приведенный ниже код в блокнот.

Обновите параметры 'MyWorkbook.xls' и 'MyMacro'.

Сохраните его с расширением vbs и запустите.

Option Explicit

On Error Resume Next

ExcelMacroExample

Sub ExcelMacroExample() 

  Dim xlApp 
  Dim xlBook 

  Set xlApp = CreateObject("Excel.Application") 
  Set xlBook = xlApp.Workbooks.Open("C:\MyWorkbook.xls", 0, True) 
  xlApp.Run "MyMacro"
  xlApp.Quit 

  Set xlBook = Nothing 
  Set xlApp = Nothing 

End Sub 

Ключевая строка, которая запускает макрос:

xlApp.Run "MyMacro"

79
ответ дан 24 November 2019 в 12:42
поделиться

Самый простой способ сделать это:

1) Запустите Excel из вашего пакетного файла, чтобы открыть рабочую книгу, содержащую ваш макрос:

EXCEL.EXE /e "c:\YourWorkbook.xls"

2) Вызовите свой макрос из рабочей книги Workbook_open событие , например:

Private Sub Workbook_Open()
    Call MyMacro1          ' Call your macro
    ActiveWorkbook.Save    ' Save the current workbook, bypassing the prompt
    Application.Quit       ' Quit Excel
End Sub

Это теперь вернет контроль на ваш пакетный файл для выполнения другой обработки.

20
ответ дан 24 November 2019 в 12:42
поделиться

Если вам удобнее работать внутри Excel / VBA, используйте открытое событие и тестируйте среду: либо имейте файл сигнала, запись реестра или переменную среды, которая контролирует то, что открытое событие делает.

Вы можете создать файл / настройки снаружи и тестировать внутри (используйте GetEnviRomentVariable для Env-Vars) и легко протестируйте. Я написал VBScript, но сходство к VBA приведет к тому, что мне больше нет, чем легкость ..

[подробнее]

Как я понимаю проблему, вы хотите использовать электронную таблицу, как правило, больше всего / некоторые из того времени, пока он проводится в партии и сделать что-то дополнительное / разное. Вы можете открыть лист из командной строки Excel.exe, но вы не можете контролировать то, что он делает, если он не знает, где это так. Использование переменной среды относительно проста и облегчает тестирование электронной таблицы.

Чтобы уточнить, используйте функцию ниже, чтобы осмотреть окружающую среду. В модуле заявляют:

Private Declare Function GetEnvVar Lib "kernel32" Alias "GetEnvironmentVariableA" _
    (ByVal lpName As String, ByVal lpBuffer As String, ByVal nSize As Long) As Long

Function GetEnvironmentVariable(var As String) As String
Dim numChars As Long

    GetEnvironmentVariable = String(255, " ")

    numChars = GetEnvVar(var, GetEnvironmentVariable, 255)

End Function

в Wordbook Open Event (как другие):

Private Sub Workbook_Open()
    If GetEnvironmentVariable("InBatch") = "TRUE" Then
        Debug.Print "Batch"
    Else
        Debug.Print "Normal"
    End If
End Sub

добавить в активный код в зависимости от применяемого. В пакетном файле используйте

set InBatch=TRUE
2
ответ дан 24 November 2019 в 12:42
поделиться

Вы можете написать VBScript для создания экземпляра Excel через метод createObject (), затем откройте рабочую книгу и запустите макрос. Вы можете либо вызывать VBScript напрямую или вызовите VBScript из файла пакетного файла.

Вот ресурс, который я просто споткнулся: http://www.codeguru.com/forum/showthread.php?t=376401

4
ответ дан 24 November 2019 в 12:42
поделиться
Другие вопросы по тегам:

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