Vba excel запустить приложение

Запуск исполняемой программы с помощью функции 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 процесса в информационном окне MsgBox

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

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 файлы других приложений и интернет-сайты.


 

Доброго времени суток всем.
Обращаюсь за помощью. Хотелось бы сделать в excel такую функцию чтобы при нажатии кнопки, запускалась программа google earth. Проблема в том что не знаю как прописать команду на запуск приложения.

Адрес расположения.
c:Program Files (x86)GoogleGoogle Earthclientgoogleearth.exe

Заранее спасибо

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

читакм справку VBA по функции Shell

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Слэн

Пользователь

Сообщений: 5192
Регистрация: 16.01.2013

 

Ооо, круто.

sub google()
Dim go
go= Shell(«c:Program Files (x86)GoogleGoogle Earthclientgoogleearth.exe», 1)

end sub

Заработало супер! Спасибо.
Не сочтите за наглость, а почему shell не срабатывает на запуск файла. У меня есть файл в corele. Записываю команду

sub corel()
Dim co
co= Shell(«dcorelКаталог.cdr», 1)

end sub

А он выдает ошибку? Спасибо

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

#5

08.05.2013 13:34:17

т.е. совет почитать справку проигнорировали?  :)

Цитата
Runs an executable program

«файл корела» не является исполняемой программой.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

 

О да, я помню эту тему. Так хотелось сразу закидывать на эту форму метки, но я так и смог реализовать идею.
Но как использовать
With UserForm1
.WebBrowser1.Navigate «http://maps.google.ru/»
под запуск файла?

 

Шарафеев Дамир

Пользователь

Сообщений: 76
Регистрация: 01.01.1970

#8

08.05.2013 14:25:42

Цитата
«файл корела» не является исполняемой программой.

Честно, пробежался и сделал! С английским дружу на 3 с —  :D

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#9

08.05.2013 15:06:47

?

Код
shell "cmd /c d:corelКаталог.cdr",vbHide
 

Шарафеев Дамир

Пользователь

Сообщений: 76
Регистрация: 01.01.1970

#10

08.05.2013 15:25:50

Во, круто

Код
sub corel() 
Dim co 
co=Shell("cmd /c "dcorelКаталог.cdr", 0) 
end sub

Спасибо огромнейшее!!! Это то что надо.

Всем спасибо за помощь.

 

Филипп

Пользователь

Сообщений: 27
Регистрация: 06.01.2013

#11

10.05.2013 17:34:30

Цитата
Юрий М пишет:  Было с картой (см. файл)

как в строку поиска вставить данные из ячеийки и нажать энтер?
пытаюсь с помощью SendKeys, но к сожалению не получается  :(

 

anvg

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#12

11.05.2013 08:16:57

Цитата
пытаюсь с помощью SendKeys, но к сожалению не получается

А зачем SendKeys?

Код
.WebBrowser1.Navigate "https://maps.google.ru/maps?q=Санкт-Петербург,+Зимний+дворец"

Так что конструируйте адрес на maps.google.ru и значение в ячейке

 

Филипп

Пользователь

Сообщений: 27
Регистрация: 06.01.2013

 

Филипп

Пользователь

Сообщений: 27
Регистрация: 06.01.2013

с этим разобрался .WebBrowser1.Navigate «https://maps.google.ru/maps?q=Санкт-Петербург,+Зимний+дворец»

http://www.gdeetotdom.ru/map

а на этом сайте, к сожалению, в строку поиска не знаю как вставить текст.

 

gtz

Пользователь

Сообщений: 36
Регистрация: 16.12.2016

#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) и :shock: открывать документы (например, *.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


Всем большое спасибо, уважаемые!


Like this post? Please share to your friends:
  • Vba excel изменить диаграмму
  • Vba excel запустить макрос по всем листам
  • Vba excel изменить гиперссылку
  • Vba excel запустить макрос другим макросом
  • Vba excel изменение цвета ячейки