Чтение аргументов командной строки

Visual Basic for Applications:
Чтение аргументов командной строки

Как:

В отличие от более простых программных сред, VBA не имеет встроенной функции для непосредственного чтения аргументов командной строки в привычном смысле, поскольку в основном предназначен для внедрения в приложения Microsoft Office. Однако, проявив немного изобретательности, мы можем использовать Windows Script Host (WSH) или вызывать внешние API для достижения аналогичной функциональности. Вот практическое решение с использованием WSH:

  1. Создайте VBScript Для Передачи Аргументов в VBA:

    Сначала напишите файл VBScript (yourScript.vbs), который запускает ваше VBA-приложение (например, макрос Excel) и передает аргументы командной строки:

Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Open "C:\YourMacroWorkbook.xlsm"
objExcel.Run "YourMacroName", WScript.Arguments.Item(0), WScript.Arguments.Item(1)
objExcel.Quit
  1. Доступ к Аргументам в VBA:

    В вашем VBA-приложении (YourMacroWorkbook.xlsm), измените или создайте макрос (YourMacroName), чтобы он принимал параметры:

Sub YourMacroName(arg1 As String, arg2 As String)
    MsgBox "Аргумент 1: " & arg1 & " Аргумент 2: " & arg2
End Sub
  1. Запуск Скрипта:

    Выполните VBScript из командной строки, передавая аргументы по мере необходимости:

cscript yourScript.vbs "Привет" "Мир"

Это должно привести к выполнению вашего VBA-макроса с аргументами “Привет” и “Мир”, которые отображаются в сообщении.

Глубже:

В историческом контексте VBA был разработан для расширения возможностей приложений Microsoft Office, а не как самостоятельная программная среда. Таким образом, прямое взаимодействие с командной строкой выходит за рамки его основного назначения, что объясняет отсутствие встроенной поддержки для чтения аргументов командной строки.

Указанный выше метод, хотя и эффективен, является скорее обходным решением, чем родным, использующим внешнее скриптование для преодоления пробела. Этот подход может вносить сложности и потенциальные проблемы безопасности, так как требует включения макросов и, возможно, снижения настроек безопасности для выполнения.

Для задач, сильно зависящих от аргументов командной строки или нуждающихся в более плавной интеграции с операционной системой Windows, другие языки программирования, такие как PowerShell или Python, могут предложить более надежные и безопасные решения. Эти альтернативы предоставляют прямую поддержку аргументов командной строки и лучше подходят для самостоятельных приложений или скриптов, которым требуется внешний ввод для динамического изменения их поведения.