Запуск исполняемой программы с помощью функции Shell в VBA Excel. Синтаксис функции Shell, ее параметры, возвращаемые значения, примеры.
Функция Shell
Синтаксис
Синтаксис функции Shell:
1 |
Shell(pathname, [windowstyle]) |
Если значение функции присваивается переменной, параметры должны быть заключены в скобки. Если функция Shell используется только для запуска программы из кода VBA Excel, параметры должны быть указаны без скобок.
Параметры
Параметры функции Shell:
Параметр | Описание |
---|---|
pathname | Обязательный параметр. Значение типа Variant (String), задающее имя программы, которую требуется выполнить, и которое может включать диск, каталоги и папки, а также дополнительные параметры при использовании cmd. |
windowstyle | Необязательный параметр. Значение типа Variant (Integer), задающее стиль окна, в котором будет запущена программа. Если аргумент windowstyle опущен, программа запускается в свернутом окне и получает фокус. |
Константы
Константы VBA Excel, задающие стиль окна (windowstyle):
Константа | Значение | Описание |
---|---|---|
vbHide | 0 | Окно скрыто, фокус переходит к скрытому окну. |
vbNormalFocus | 1 | Окно восстанавливает свое исходное положение и размер, а также получает фокус. |
vbMinimizedFocus | 2 | Окно отображается в виде значка, а также получает фокус. |
vbMaximizedFocus | 3 | Окно разворачивается на весь экран, а также получает фокус. |
vbNormalNoFocus | 4 | Окно восстанавливает свое исходное положение и размер, но фокус не получает. |
vbMinimizedNoFocus | 6 | Окно отображается в виде значка, но фокус не получает. |
Примечания
- Если функция Shell успешно запускает указанную программу, возвращается код (идентификатор) задачи запущенной программы (ID процесса в Диспетчере задач). Если функция Shell не может запустить указанную программу из кода VBA Excel, происходит ошибка.
- Если в полном имени запускаемой программы содержатся пробелы, полное имя программы следует заключить в тройные кавычки (три пары двойных кавычек):
"""C:\Program Files\Папка программы\имя.exe"""
. - По умолчанию функция Shell запускает другие программы асинхронно. Это означает, что программа, запущенная с помощью команды Shell, может не завершиться до того, как будут выполнены операторы, следующие за функцией Shell.
Примеры
Пример 1
Запустим с помощью функции Shell программу Notepad++, отобразим идентификатор задачи в информационном окне MsgBox и сравним его с ID процесса в Диспетчере задач.
Используем в параметре pathname тройные кавычки (три пары двойных кавычек), так как полное имя файла содержит пробелы:
1 2 3 4 5 |
Sub Primer1() Dim myTest myTest = Shell("""C:\Program Files (x86)\Notepad++\notepad++.exe""", vbNormalFocus) MsgBox myTest End Sub |
ID процесса в информационном окне MsgBox:
ID процесса в Диспетчере задач:
Пример 2
Запуск проводника Windows из кода VBA Excel с помощью функции Shell.
Обе строки открывают окно проводника Windows с набором дисков и папок по умолчанию:
1 2 |
Shell "C:\Windows\explorer.exe", vbNormalFocus Shell "explorer", vbNormalFocus |
Обе строки открывают папку «Текущая папка»:
1 2 |
Shell "C:\Windows\explorer.exe C:\Users\Public\Текущая папка", vbNormalFocus Shell "explorer C:\Users\Public\Текущая папка", vbNormalFocus |
Пример 3
Запуск командной строки из кода VBA Excel с помощью функции Shell.
Обе строки запускают программу cmd и открывают окно командной строки:
1 2 |
Shell "C:\Windows\System32\cmd.exe", vbNormalFocus Shell "cmd", vbNormalFocus |
Записываем строку «Большой привет!» в файл «C:\Тестовая папка\test1.txt» (если файл не существует, от будет создан):
1 |
Shell "cmd /c echo Большой привет!>""C:\Тестовая папка\test1.txt""", vbHide |
Здесь полное имя файла является параметром программы cmd, поэтому, если оно содержит пробелы, оно заключается в две пары двойных кавычек, а не в три, как параметр pathname функции Shell.
Константа vbHide используется для того, чтобы при выполнении команды не мелькало окно командной строки.
Параметр «/c» программы cmd указывает, что после выполнения команды программа завершает работу и окно командной строки закрывается. Чтобы программа cmd после выполнения команды продолжила работу и ее окно осталось открытым, вместо параметра «/c» следует указать параметр «/k» и заменить константу vbHide на константу, не скрывающую окно.
Копируем файл «C:\Тестовая папка\test1.txt» в файл «C:\Тестовая папка\test2.txt»:
1 |
Shell "cmd /c copy ""C:\Тестовая папка\test1.txt"" ""C:\Тестовая папка\test2.txt""", vbHide |
Смотрите как открывать из кода VBA Excel файлы других приложений и интернет-сайты.
Здравствуйте!
А как отследить, запущено ли приложение и если нет, то запустить его?
Например, мне с 1С нужно так сделать
(к сожалению, он позволяет запускать копии, поэтому такая проверка нужна).
И можно ли как-то файл с id связать?..
У меня файл называется 1cv8c.exe,
но вдруг он как-то изменит название,
вот придёт завтра обновление и он станет 99xw81d.exe
Спасибо!
Здравствуйте!
Почему
Shell "C:\Program Files (x86)\ABBYY FineReader 12\FineCmd.exe d:\Путь\файл.jpg /out C:\Путь\result.txt /quit", vbHide
не скрывает окно FineCmd.exe?
Обсуждение закрыто.