VBA Excel. Функция Shell

    Запуск исполняемой программы с помощью функции Shell в VBA Excel. Синтаксис функции Shell, ее параметры, возвращаемые значения, примеры.

    Функция Shell

    Shell – это функция, которая запускает указанную исполняемую программу и возвращает значение Variant (Double), представляющее идентификатор задачи запущенной программы, или возникает ошибка, если функция Shell не может запустить указанную программу.

    Синтаксис

    Синтаксис функции Shell:

    Если значение функции присваивается переменной, параметры должны быть заключены в скобки. Если функция 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 тройные кавычки (три пары двойных кавычек), так как полное имя файла содержит пробелы:

    ID процесса в информационном окне MsgBox:

    ID процесса в информационном окне MsgBox

    ID процесса в Диспетчере задач:

    ID процесса в Диспетчере задач

    Пример 2
    Запуск проводника Windows из кода VBA Excel с помощью функции Shell.

    Обе строки открывают окно проводника Windows с набором дисков и папок по умолчанию:

    Обе строки открывают папку «Текущая папка»:

    Пример 3
    Запуск командной строки из кода VBA Excel с помощью функции Shell.

    Обе строки запускают программу cmd и открывают окно командной строки:

    Записываем строку «Большой привет!» в файл «C:\Тестовая папка\test1.txt» (если файл не существует, от будет создан):

    Здесь полное имя файла является параметром программы cmd, поэтому, если оно содержит пробелы, оно заключается в две пары двойных кавычек, а не в три, как параметр pathname функции Shell.

    Константа vbHide используется для того, чтобы при выполнении команды не мелькало окно командной строки.

    Параметр «/c» программы cmd указывает, что после выполнения команды программа завершает работу и окно командной строки закрывается. Чтобы программа cmd после выполнения команды продолжила работу и ее окно осталось открытым, вместо параметра «/c» следует указать параметр «/k» и заменить константу vbHide на константу, не скрывающую окно.

    Копируем файл «C:\Тестовая папка\test1.txt» в файл «C:\Тестовая папка\test2.txt»:

    Смотрите как открывать из кода VBA Excel файлы других приложений и интернет-сайты.


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    2 комментария для “VBA Excel. Функция Shell”

    1. Здравствуйте!
      А как отследить, запущено ли приложение и если нет, то запустить его?
      Например, мне с 1С нужно так сделать
      (к сожалению, он позволяет запускать копии, поэтому такая проверка нужна).
      И можно ли как-то файл с id связать?..
      У меня файл называется 1cv8c.exe,
      но вдруг он как-то изменит название,
      вот придёт завтра обновление и он станет 99xw81d.exe
      Спасибо!

    2. Сбитый Лётчик Небосводов

      Здравствуйте!
      Почему
      Shell "C:\Program Files (x86)\ABBYY FineReader 12\FineCmd.exe d:\Путь\файл.jpg /out C:\Путь\result.txt /quit", vbHide
      не скрывает окно FineCmd.exe?

    Добавить комментарий

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