Запуск исполняемой программы с помощью функции Shell в VBA Excel. Синтаксис функции Shell, ее параметры, возвращаемые значения, примеры.
Shell – это функция, которая запускает указанную исполняемую программу и возвращает значение Variant (Double), представляющее идентификатор задачи запущенной программы, или возникает ошибка, если функция Shell не может запустить указанную программу.
Синтаксис
Синтаксис функции Shell:
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 тройные кавычки (три пары двойных кавычек), так как полное имя файла содержит пробелы:
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 с набором дисков и папок по умолчанию:
Shell «C:Windowsexplorer.exe», vbNormalFocus Shell «explorer», vbNormalFocus |
Обе строки открывают папку «Текущая папка»:
Shell «C:Windowsexplorer.exe C:UsersPublicТекущая папка», vbNormalFocus Shell «explorer C:UsersPublicТекущая папка», vbNormalFocus |
Пример 3
Запуск командной строки из кода VBA Excel с помощью функции Shell.
Обе строки запускают программу cmd и открывают окно командной строки:
Shell «C:WindowsSystem32cmd.exe», vbNormalFocus Shell «cmd», vbNormalFocus |
Записываем строку «Большой привет!» в файл «C:Тестовая папкаtest1.txt» (если файл не существует, от будет создан):
Shell «cmd /c echo Большой привет!>»«C:Тестовая папкаtest1.txt»«», vbHide |
Здесь полное имя файла является параметром программы cmd, поэтому, если оно содержит пробелы, оно заключается в две пары двойных кавычек, а не в три, как параметр pathname функции Shell.
Константа vbHide используется для того, чтобы при выполнении команды не мелькало окно командной строки.
Параметр «/c» программы cmd указывает, что после выполнения команды программа завершает работу и окно командной строки закрывается. Чтобы программа cmd после выполнения команды продолжила работу и ее окно осталось открытым, вместо параметра «/c» следует указать параметр «/k» и заменить константу vbHide на константу, не скрывающую окно.
Копируем файл «C:Тестовая папкаtest1.txt» в файл «C:Тестовая папкаtest2.txt»:
Shell «cmd /c copy ««C:Тестовая папкаtest1.txt»» ««C:Тестовая папкаtest2.txt»«», vbHide |
Смотрите как открывать из кода VBA Excel файлы других приложений и интернет-сайты.
Доброго времени суток всем. Адрес расположения. Заранее спасибо |
|
ikki Пользователь Сообщений: 9709 |
читакм справку VBA по функции Shell фрилансер Excel, VBA — контакты в профиле |
Слэн Пользователь Сообщений: 5192 |
|
Ооо, круто. sub google() end sub Заработало супер! Спасибо. sub corel() end sub А он выдает ошибку? Спасибо |
|
ikki Пользователь Сообщений: 9709 |
#5 08.05.2013 13:34:17 т.е. совет почитать справку проигнорировали?
«файл корела» не является исполняемой программой. фрилансер Excel, VBA — контакты в профиле |
||
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
|
О да, я помню эту тему. Так хотелось сразу закидывать на эту форму метки, но я так и смог реализовать идею. |
|
Шарафеев Дамир Пользователь Сообщений: 76 |
#8 08.05.2013 14:25:42
Честно, пробежался и сделал! С английским дружу на 3 с — |
||
Казанский Пользователь Сообщений: 8839 |
#9 08.05.2013 15:06:47 ?
|
||
Шарафеев Дамир Пользователь Сообщений: 76 |
#10 08.05.2013 15:25:50 Во, круто
Спасибо огромнейшее!!! Это то что надо. Всем спасибо за помощь. |
||
Филипп Пользователь Сообщений: 27 |
#11 10.05.2013 17:34:30
как в строку поиска вставить данные из ячеийки и нажать энтер? |
||
anvg Пользователь Сообщений: 11878 Excel 2016, 365 |
#12 11.05.2013 08:16:57
А зачем SendKeys?
Так что конструируйте адрес на maps.google.ru и значение в ячейке |
||||
Филипп Пользователь Сообщений: 27 |
|
Филипп Пользователь Сообщений: 27 |
с этим разобрался .WebBrowser1.Navigate «https://maps.google.ru/maps?q=Санкт-Петербург,+Зимний+дворец» http://www.gdeetotdom.ru/map а на этом сайте, к сожалению, в строку поиска не знаю как вставить текст. |
gtz Пользователь Сообщений: 36 |
#15 14.02.2018 10:33:14 Юрий М Что такое всё? |
Запуск и управление приложениями семейства MS Office
Иногда требуется управлять другими приложениями из VBA Excel. Начнем с приложений семейства Microsoft Office. Например, на основе произведенных расчетов в Excel надо сформировать текстовый документ в Word-е. Для начала в нашем проекте надо подключить библиотеку с объектами MS Word:
Tools=>References подключаем последнюю версию библиотеки Microsoft Word Object Library
Пример кода для запуска Word-а из VBA
Dim w As Word.Application Set w = New Word.Application w.Visible = True w.Activate
Вот и все, мы запустили приложение Word.
Аналогичным способом можно запустить любое другое приложение из семейства Microsoft Office: Access, Outlook, PowerPoint. Можно получить к любому приложению, которое мы видим списке библиотек.
Для работы с внешним приложением необходимо ознакомиться с объектной моделью, изучить свойства и методы объектов.
Кроме запуска внешнего приложения, мы имеем полный доступ к объектам данного приложения. Можно писать макросы, которые будут управлять объектами Word в данном случае.
Запуск внешнего приложения с помощью скрипта WScript.Shell.
Все очень просто
Sub RunShell() Set WSShell = CreateObject("Wscript.Shell") WSShell.Run """C:Program Files (x86)GoogleGoogle Earthclientgoogleearth.exe""", 1 End Sub
Главное пишем побольше кавычек (аж три штуки с краю), если путь содержит пробелы и прочие «противные» символы.
К сожалению, в данном случае, мы только запускаем внешнее приложение без доступа к его объектам.
Запуск и управление внешним приложением
В меню VBA=>Tools=>Refernces видно все COM-объекты приложений, которые установлены на вашем компьютере. Подключаем соответствующую библиотеку, например, «GrymCore». И мы получаем доступ к ДубльГису. С документацией API Дубль Гиса можно ознакомиться на их сайте.
I have a target file path that is structured like example below.
C:Program FilesTestfoobar.exe /G
What I need to do is be able to execute this file using VBA’s shell()
command.
How do I have to format the file path to tell Shell()
that there is an argument that it needs to call along with running the .exe
What I’ve read/tried (with no avail) is below with the results to the right.
file = """C:Program FilesTestfoobar.exe"" /G" <---Bad file name or number (Error 52)
shell(file)
file2 = "C:Program FilesTestfoobar.exe /G" <---file never found
shell(file2)
I’ve succeeded with running other .exe’s using shell() so I know it’s not a problem with VBA or the function.
Example:
works = "C:Program FilesTesttest.exe"
shell(works)
I’m not particularly familiar with the process involved with executing files that require additional parameters so if I misspeak or you need more information, please let me know.
Модератор:Naeel Maqsudov
-
Sokl
- Сообщения:449
- Зарегистрирован:12 сен 2005, 08:52
- Откуда:ОМ
Необходимо из VBA, зная путь и имя файла, запускать программы (*.exe) и открывать документы (например, *.psd; *.doc; *.txt, то есть как в проводнике, для зарегисрированных типов файлов автоматичеки запускать их приложение, в котором открывать документ)!
Shell(PathName) — Не помогает (для документов не работает).
Есть способ? (Сейчас работаю с VBA.Excel, и VBA.Project)
Заранее благодарен.
-
treider
- Сообщения:57
- Зарегистрирован:01 сен 2005, 13:29
- Откуда:Алматы
- Контактная информация:
21 сен 2005, 08:39
Попробуй так
Код: Выделить всё
Sub start(command As String)
Set WshScript = CreateObject("WScript.Shell")
D = WshScript.Run(command, 4, False)
End Sub
-
Sokl
- Сообщения:449
- Зарегистрирован:12 сен 2005, 08:52
- Откуда:ОМ
21 сен 2005, 08:53
СПАСИБО! Отлично!
Уже несколько раз мне попадался на глаза «WScript.Shell»… Вы можете дать ссылку на материалы по этому «.Shell» или какие-то примеры? (Treider, у меня есть Ваш еАдрес, а у Вас мой, если не затруднит…)
Спасибо.
-
treider
- Сообщения:57
- Зарегистрирован:01 сен 2005, 13:29
- Откуда:Алматы
- Контактная информация:
21 сен 2005, 09:07
Очень много разного всякого по VBA и VBS есть в MSDN
http://msdn.microsoft.com/library/defau … Script.asp
У всех этих объктов есть один существенный не достаток: список свойств и методов меняется в зависимости от версии Windows, IE и.пр поэтому тестировать надо на самой нижней версии какая только есть
-
Avsha
- Сообщения:664
- Зарегистрирован:08 сен 2005, 13:47
- Откуда:KZ
21 сен 2005, 10:28
Кстати, работают и эти варианты:
Shell «C:Program FilesMicrosoft OfficeOfficeEXCEL.EXE » + _
«C:Книга1.xls», 1
Shell «C:WINNTNOTEPAD.EXE Файл.txt», vbNormalFocus
Только абсолютный путь к приложениям Excel и другим не всегда одинаковый на всех машинах,
Может использовать переменные среды Windows?
-
Avsha
- Сообщения:664
- Зарегистрирован:08 сен 2005, 13:47
- Откуда:KZ
26 сен 2005, 06:18
Подскажите, можно ли
и как обратиться к переменным среды Windows?
Например: %SystemRoot%=»C:WINNT»
-
treider
- Сообщения:57
- Зарегистрирован:01 сен 2005, 13:29
- Откуда:Алматы
- Контактная информация:
26 сен 2005, 07:28
Если нужно получить только имя католога
Код: Выделить всё
Set f = CreateObject("Scripting.FileSystemObject")
MsgBox (f.GetSpecialFolder(SystemRoot))
-
treider
- Сообщения:57
- Зарегистрирован:01 сен 2005, 13:29
- Откуда:Алматы
- Контактная информация:
26 сен 2005, 07:44
А, что касаемо переменных окружения
Код: Выделить всё
Sub ShowPath()
MsgBox (Environ("path"))
end sub
-
Avsha
- Сообщения:664
- Зарегистрирован:08 сен 2005, 13:47
- Откуда:KZ
26 сен 2005, 08:37
Спасибо treider, … полностью исчерпывающий ответ.
И еще вопрос,
Как получить в программе имя папки, из которой запускается скомпилированный файл .exe?
Напримeр запускаем C:Sampleprogramm.exe
Надо получить MyPath=»C:Sample»
Подскажите пожалуйста, каким образом можно запустить из Excel какой-нибудь файл, например файл справки chm, или exe-файл, в ответ на какое-либо событие, например нажитие кнопки.
Вешаем на кнопку CommandButton1
Private Declare Function ShellExecute Lib «shell32.dll» _
Alias «ShellExecuteA» (ByVal hWnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByDirectory As String, _
ByVal nShowCmd As Long) As Long
Private Sub CommandButton1_Click()
Call ShellExecute(0&, vbNullString, «Полный путь к файлу», vbNullString, vbNullString, vbNormalFocus)
End Sub
Скажи мне, кудесник, любимец ба’гов…
Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995
Ещё есть команда Shell
Call Shell(«Calc.exe», 1)
Разрабатываю макросы под заказ.
Email: MacrosForYou собака yandex точка ru
Всем большое спасибо, уважаемые!