У меня есть макрос Excel VBA, который я должен выполнить при доступе к файлу от пакетного файла, но не каждый раз я открываю его (следовательно не использование открытого события файла). Существует ли способ выполнить макрос из командной строки или пакетного файла? Я не знаком с такой командой.
Примите среду Windows NT.
Вы можете запустить 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"
Самый простой способ сделать это:
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
Это теперь вернет контроль на ваш пакетный файл для выполнения другой обработки.
Если вам удобнее работать внутри 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
Вы можете написать VBScript для создания экземпляра Excel через метод createObject (), затем откройте рабочую книгу и запустите макрос. Вы можете либо вызывать VBScript напрямую или вызовите VBScript из файла пакетного файла.
Вот ресурс, который я просто споткнулся: http://www.codeguru.com/forum/showthread.php?t=376401