Visual Basic for Applications:
Чтение аргументов командной строки
Как:
В отличие от более простых программных сред, VBA не имеет встроенной функции для непосредственного чтения аргументов командной строки в привычном смысле, поскольку в основном предназначен для внедрения в приложения Microsoft Office. Однако, проявив немного изобретательности, мы можем использовать Windows Script Host (WSH) или вызывать внешние API для достижения аналогичной функциональности. Вот практическое решение с использованием WSH:
Создайте 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
Доступ к Аргументам в VBA:
В вашем VBA-приложении (YourMacroWorkbook.xlsm), измените или создайте макрос (YourMacroName), чтобы он принимал параметры:
Sub YourMacroName(arg1 As String, arg2 As String)
MsgBox "Аргумент 1: " & arg1 & " Аргумент 2: " & arg2
End Sub
Запуск Скрипта:
Выполните VBScript из командной строки, передавая аргументы по мере необходимости:
cscript yourScript.vbs "Привет" "Мир"
Это должно привести к выполнению вашего VBA-макроса с аргументами “Привет” и “Мир”, которые отображаются в сообщении.
Глубже:
В историческом контексте VBA был разработан для расширения возможностей приложений Microsoft Office, а не как самостоятельная программная среда. Таким образом, прямое взаимодействие с командной строкой выходит за рамки его основного назначения, что объясняет отсутствие встроенной поддержки для чтения аргументов командной строки.
Указанный выше метод, хотя и эффективен, является скорее обходным решением, чем родным, использующим внешнее скриптование для преодоления пробела. Этот подход может вносить сложности и потенциальные проблемы безопасности, так как требует включения макросов и, возможно, снижения настроек безопасности для выполнения.
Для задач, сильно зависящих от аргументов командной строки или нуждающихся в более плавной интеграции с операционной системой Windows, другие языки программирования, такие как PowerShell или Python, могут предложить более надежные и безопасные решения. Эти альтернативы предоставляют прямую поддержку аргументов командной строки и лучше подходят для самостоятельных приложений или скриптов, которым требуется внешний ввод для динамического изменения их поведения.