Shell VBA Excel je funkce, která Vám umožňuje spustit externí aplikaci z kódu VBA. Je široce používán pro automatizaci úloh a interakci s jinými programy přímo z Excelu. Funkce Shell vám umožňuje nejen spustit aplikaci, ale také jí předat možnosti příkazového řádku, spravovat její práci a získávat výsledky jejího provádění.
Příklady použití VBA Excel Shell mohou být rozmanité. Pomocí ní můžete například spustit zpracování dat externím programem, automaticky spustit přehledy nebo exportovat data do jiných formátů. To je zvláště užitečné, když je vyžadována integrace Excelu s jinými programy, které mohou být výkonnější nebo mají jedinečné schopnosti, které nejsou v Excelu k dispozici.
Kód VBA Excel Shell může vypadat takto:
Dim returnValue As Double
returnValue = Shell("C:\Program Files\MyApp\MyApp.exe", 1)
V tomto příkladu spouštíme externí aplikaci "MyApp", která je ve složce "C:\Program Files\MyApp\". Možnost " 1 " označuje, že chceme, aby aplikace fungovala v režimu mimo okno (bez otevření okna). Hodnota vrácená funkcí Shell je identifikátor procesu aplikace, který lze použít ke správě jeho práce z kódu VBA.
Kromě spuštění programu, VBA Excel Shell může být použit k přenosu parametrů příkazového řádku do aplikace, detekci, dokončení nebo správě spuštěných procesů a dalších operací. Snadný přístup k externím aplikacím nám otevírá mnoho možností pro automatizaci úloh a rozšíření funkčnosti aplikace Excel.
Příklady použití příkazu Shell v aplikaci VBA Excel
Příkaz Shell v aplikaci VBA Excel vám umožňuje spustit externí aplikaci nebo spustit příkaz na příkazovém řádku. Je to výkonný nástroj, který lze použít k automatizaci různých úkolů.
Níže je několik příkladů použití příkazu Shell v aplikaci VBA Excel:
-
Spuštění externí aplikace:
Sub RunExternalApp()Dim AppPath As StringAppPath = "C:\Program Files\Internet Explorer\iexplore.exe"Shell AppPathEnd Sub
Sub RunCommandLine()Dim Command As StringCommand = "echo Hello, World!"Shell "cmd.exe /c " & CommandEnd Sub
Sub RunFileWithArguments()Dim FilePath As StringDim Arguments As StringFilePath = "C:\MyScript.vbs"Arguments = "arg1 arg2 arg3"Shell "wscript.exe """ & FilePath & """ " & ArgumentsEnd Sub
Sub WaitForApp()Dim AppPath As StringDim ProcessID As DoubleDim WSHShell As ObjectAppPath = "C:\Program Files\Internet Explorer\iexplore.exe"Set WSHShell = CreateObject("WScript.Shell")ProcessID = WSHShell.Run(AppPath, 1, True)MsgBox "Application has exited"End Sub
Příkaz Shell umožňuje interakci s externími aplikacemi a příkazovým řádkem a otevírá široké možnosti pro automatizaci úloh v aplikaci VBA Excel. To umožňuje výrazně zlepšit efektivitu práce a snížit náklady na rutinní operace.
Jak spustit externí program z VBA Excel
V VBA Excel lze snadno spustit externí program pomocí funkce Shell. Tato funkce vám umožňuje spustit příkaz Shell v operačním systému, což vám umožní otevřít, spustit nebo spustit jiné programy nebo soubory.
Chcete-li spustit externí program pomocí funkce Shell v aplikaci VBA Excel, musíte zadat úplnou cestu k programu nebo souboru, který chcete otevřít. V případě potřeby je pak možné předat další parametry nebo argumenty. Zde je příklad kódu, který ukazuje použití funkce Shell:
Sub RunExternalProgram()Dim ProgramPath As StringDim Arguments As String' Указываем полный путь к программеProgramPath = "C:\Program Files\Internet Explorer\iexplore.exe"' Передаем дополнительные аргументы, если нужноArguments = "https://www.google.com"' Запускаем программу с помощью функции ShellShell ProgramPath & " " & ArgumentsEnd Sub
V tomto příkladu jsme uvedli úplnou cestu k programu Internet Explorer a argumentem jsme předali odkaz na web Google. Při provádění tohoto podprogramu bude Internet Explorer spuštěn a otevře zadaný web.
Kromě spouštění programů lze funkci Shell použít také k provádění dalších příkazů, jako je otevírání souborů, spouštění dávkových souborů a další operace, které lze provést prostřednictvím příkazového řádku. Nezapomeňte zkontrolovat správnost cesty k programu nebo souboru a vezměte v úvahu, že některé programy mohou vyžadovat další možnosti, aby správně fungovaly.
Získávání dat z externího programu pomocí Shell VBA Excel
Chcete-li získat data z externího programu, musíte postupovat podle následujících kroků:
- Určete cestu k externímu spustitelnému souboru programu
- Definujte argumenty příkazového řádku, pokud jsou vyžadovány
- Spustit program pomocí funkce Shell
- Zachytit výsledek práce programu
' Определение пути к исполняемому файлуDim path As Stringpath = "C:\Program Files\SomeProgram.exe"' Определение аргументов командной строкиDim args As Stringargs = "/arg1 /arg2"' Выполнение программыDim result As Stringresult = Shell(path & " " & args, vbNormalFocus)' Перехват результат работы программыMsgBox result
V tomto příkladu provádíme externí program " SomeProgram.exe "s argumenty příkazového řádku" / arg1 "a" / arg2". Výsledek práce programu uložíme do proměnné result a zobrazíme jej na obrazovce pomocí MsgBox.
Funkce Shell tak umožňuje interakci s externími programy a získávání dat z nich, což otevírá široké možnosti pro automatizaci procesů v Excelu. Je důležité si uvědomit, že při používání funkce Shell je třeba vzít v úvahu funkce externího programu a správně formulovat argumenty příkazového řádku.
Spouštění příkazů na příkazovém řádku pomocí VBA Excel Shell
Vestavěná funkce Shell v aplikaci VBA Excel umožňuje spouštět příkazy v příkazovém řádku operačního systému přímo z Maker Excelu. To je velmi užitečné, protože vám umožňuje automatizovat provádění různých příkazů a skriptů, aniž byste museli přepínat mezi aplikacemi.
Chcete-li spustit příkaz na příkazovém řádku pomocí VBA Excel Shell, musíte použít následující konstrukci:
Shell "command", vbNormalFocus
Místo "command" musíte zadat příkaz, který chcete spustit na příkazovém řádku. Například otevřít soubor "C:\example..txt " v textovém editoru Notepad, musíte použít následující příkaz:
Shell "notepad.exe C:\example.txt", vbNormalFocus
Parametr vbNormalFocus určuje, na základě jaké logiky bude příkazový řádek reagovat na chyby. Bere jeden z významů:
- vbnormalfocus-příkazový řádek bude fungovat stejně, jako by byl aktivní.
- vbminimizedfocus-příkazový řádek poběží na pozadí, bez zobrazení okna.
- vbmaximizedfocus-příkazový řádek poběží na pozadí, ale se zobrazením okna.
Po spuštění příkazu na příkazovém řádku se řízení vrátí zpět do makra aplikace Excel. Tuto funkci můžete použít k provedení jakýchkoli dalších akcí po dokončení příkazu.
Příklad použití VBA Excel Shell k provedení příkazu na příkazovém řádku:
Sub RunCommand()Shell "ipconfig", vbNormalFocusMsgBox "Команда выполнена"End Sub
V tomto příkladu bude na příkazovém řádku spuštěn příkaz "ipconfig", který zobrazí informace o síťovém připojení. Po provedení příkazu bude v Excelu zobrazena zpráva "příkaz splněn".
Všimněte si, že při provádění příkazu na příkazovém řádku se proces může zastavit, dokud nebude příkaz proveden úplně. Pokud tedy chcete pokračovat v provádění makra bez čekání na dokončení příkazu, můžete pomocí možnosti vbhide použít asynchronní volání příkazu:
Shell "command", vbHide
Sub RunCommandAsync()Shell "ping google.com -n 5", vbHideMsgBox "Команда запущена"End Sub
V tomto příkladu bude spuštěn příkaz "ping google.com -n 5" pro kontrolu dostupnosti serveru Google. Jakmile je příkaz spuštěn, zobrazí se v Excelu zpráva "příkaz spuštěn", aniž byste čekali na jeho dokončení.
Sdílení dat s externími aplikacemi přes Shell do aplikace VBA Excel
Jedním ze způsobů, jak sdílet data s externími aplikacemi přes Shell, je použití příkazového řádku. Externí aplikace můžete spouštět tak, že jim přes příkazový řádek předáte možnosti a výsledky jejich práce získáte zpět v Excelu.
Můžete například vytvořit makro v Excelu, které spustí Word a předá mu možnosti pro otevření a úpravu dokumentu. Výsledky úprav lze uložit zpět do Excelu nebo do jiného souboru.
Dalším způsobem, jak sdílet data s externími aplikacemi, je použití souborů. Můžete vytvářet soubory z Excelu, přenášet je do externí aplikace a číst výsledky jejich práce zpět do Excelu. Můžete například vytvořit soubor obsahující data pro sestavení grafu v Excelu a přenést jej do programu specializovaného na vytváření grafů. Výsledky programu lze uložit do souboru a přečíst zpět v Excelu pro zobrazení.
Shell umožňuje automatizovat práci s externími aplikacemi prostřednictvím kódu VBA Excel a poskytuje mnoho možností pro sdílení dat. Tento nástroj se stává obzvláště užitečným, když potřebujete komunikovat s různými programy a automatizovat duplicitní úkoly.
Příklad použití:
Sub RunExternalApplication()Dim appPath As StringappPath = "C:\Program Files\Microsoft Office\Office16\WINWORD.EXE"Shell appPathEnd Sub
V tomto příkladu spouštíme Microsoft Word a ukazujeme cestu k spustitelnému souboru (WINWORD.EXE). Tuto cestu můžete nahradit cestou k jinému spustitelnému souboru a předat mu požadované parametry prostřednictvím příkazového řádku.
Poznámka: před použitím funkce Shell se ujistěte, že víte, jak správně používat příkazy a možnosti externích aplikací, abyste se vyhnuli ztrátě dat nebo nežádoucím změnám v systému.
Ovládání provádění externího programu pomocí Shell v aplikaci VBA Excel
VBA Excel má funkci Shell, která Vám umožňuje spouštět externí programy z kódu makra. Často je však nutné sledovat spuštění spuštěného programu, abyste získali informace o jeho stavu nebo výsledku práce. V tomto článku se podíváme na to, jak lze implementovat kontrolu provádění externího programu pomocí Shell v aplikaci VBA Excel.
Pro začátek uveďme cestu k spustitelnému souboru programu, který je třeba spustit pomocí funkce Shell. K tomu použijeme následující kód:
Dim programPath As StringprogramPath = "C:\Program Files\MyProgram\MyProgram.exe"
Po zadání cesty k spustitelnému souboru můžeme zavolat funkci Shell a spustit program:
Dim processID As DoubleprocessID = Shell(programPath, vbNormalFocus)
Funkce Shell vrací identifikátor procesu spuštěného programu. Tento identifikátor budeme potřebovat k dalšímu sledování provádění programu.
Chcete-li získat informace o stavu provádění programu, můžeme použít funkci GetProcessById z objektu WMI (Windows Management Instrumentation). K tomu budeme muset přidat odkaz na knihovnu WMI do projektu VBA Excel:
Tools -> References -> Microsoft WMI Scripting V1.2
Po přidání odkazu můžeme definovat funkci, která bude dostávat informace o stavu provádění programu podle jeho ID:
Function GetProcessStatus(processID As Double) As StringDim objWMIService As ObjectDim objProcess As ObjectDim processStatus As StringSet objWMIService = GetObject("winmgmts:\\.oot\CIMV2")Set objProcess = objWMIService.Get("Win32_Process.Handle='" & processID & "'")processStatus = objProcess.ExecutablePathIf Not IsEmpty(processStatus) ThenGetProcessStatus = "Запущена"ElseGetProcessStatus = "Завершена"End IfEnd Function
V této funkci používáme objekt objWMIService k získání objektu objProcess podle ID procesu. Poté zkontrolujeme, zda je cesta ke spustitelnému souboru prázdná nebo ne. Pokud cesta není prázdná, znamená to, že program je stále spuštěn a vrátíte řádek "spuštěn". V opačném případě, pokud je cesta prázdná, program je již dokončen a vrátíte řádek "dokončeno".
Nyní můžeme tuto funkci použít ke kontrole provádění programu. Můžete například vytvořit cyklus, který v určitých intervalech zkontroluje stav programu:
Sub MonitorProgramStatus()Dim programPath As StringprogramPath = "C:\Program Files\MyProgram\MyProgram.exe"Dim processID As DoubleprocessID = Shell(programPath, vbNormalFocus)Dim status As StringDostatus = GetProcessStatus(processID)Debug.Print "Статус программы: " & statusApplication.Wait (Now + TimeValue("0:00:01"))Loop Until status = "Завершена"Debug.Print "Программа завершена"End Sub
V tomto příkladu používáme cyklus Do Until, který bude spuštěn, dokud nebude stav programu "dokončen". V rámci cyklu získáme stav programu pomocí funkce getprocessstatus a výstupem na panel nástrojů VBA Excel pomocí metody Debug.Print. K vytvoření zpoždění mezi kontrolami stavu programu používáme metodu Application.Wait.
Podívali jsme se tedy na příklady použití funkce Shell ke kontrole provádění externího programu v aplikaci VBA Excel. Tento přístup umožňuje získat informace o stavu provádění programu a přijmout příslušné akce v závislosti na tomto stavu.