Denna handledning visar hur du använder VBA Shell -funktionen.
Vi kan använda VBA Skal funktion för att anropa ett separat, körbart program inifrån ett VBA -program. Om vi till exempel behöver öppna Notepad från Excel kan vi använda VBA Shell -funktionen för att göra det. Om Shell -anropet lyckas returnerar det Windows TaskID -värdet för det program det kallade. Om Shell -anropet misslyckas returnerar det noll.
Skal har två ingångsparametrar: en obligatorisk sökvägsnamn för att programmet ska ringa, och valfritt fönsterstil värde som styr stilen i fönstret där programmet ska köras. De sökvägsnamn värde kan inkludera programmets sökväg / katalog och argument.
Ring Shell
Denna kod kan utgöra en del av ett makro som ska köras Anteckningsblock med hjälp av VBA -samtal kommando för att ringa Skal fungera.
1 | Call Shell ("anteckningsblock", vbNormalFocus) |
Till exempel:
Skal vänta
Vi kan använda VBA Vänta kommando för att fördröja samtalet till Skal kommando för en viss tidsperiod.
12 | Application.Wait (Now + TimeValue ("00:00:05"))Call Shell ("anteckningsblock", vbNormalFocus) |
Därför kommer 5 sekunder att passera innan Shell -kommandot anropas.
Returnerar ett fel från skalfunktionen
Om vi har ett fel i vår kod när vi ringer Skal funktion, och fel kommer att returneras och vår kod kommer att gå till felsökningsläge.
Till exempel har vi i detta makro stavat "anteckningsblock" felaktigt.
1 | Call Shell ("anteckningsblock", vbNormalFocus) |
Resultatet av att köra detta makro blir:
VBA -programmering | Kodgenerator fungerar för dig!
Öppna en befintlig fil med skal
Om vi har en specifik fil som vi vill öppna med Skal kommando kan vi inkludera filnamnet i vår kod.
1 | Call Shell ("Notepad.exe C: \ demo \ shell_test.txt", vbNormalFocus) |
Om vi stavar filnamnet fel, kommer filen inte att hittas och en meddelanderuta visas som frågar oss om vi vill skapa en ny fil.
Parametrar som används av Shell -funktionen
De Skal funktionen har två parametrar - namnet på det program som ska ringas och den Windows -stil som programmet ska använda. Vi har använt vbNormalFocus i exemplen ovan vilket innebär att när programmet (i det här fallet Notepad) öppnas har det fokus och det öppnas i standardpositionen och storleken på datorn.
De Skal erbjuder fem andra alternativ:
vbHide Döljer fönstret och ställer fokus på det fönstret
vbMinimizedFocus Visar fönstret som en ikon med fokus
vbMaximizedFocus Öppnar programmet i ett maximerat fönster med fokus
vbNormalNoFocus Återställer fönstret vid sin senaste position och storlek
vbMinimizedNoFocus Visar fönstret som en ikon och fönstret som för närvarande är aktivt förblir aktivt
Returnera ett process -ID från Shell -kommandot
När vi kör Skal Kommando, det returnerar ett process- eller uppgifts -ID. Vi kan lagra process -ID i en variabel och använda det process -ID: t för att köra ett annat kommando - till exempel TaskKill kommando för att stänga anteckningsfilen.
123456 | Sub TestPIDDim ProcessID som heltalprocessID = Shell ("anteckningsblock", vbNormalFocus)Call Shell ("Taskkill /F /PID" + CStr (processID))MsgBox ("Anteckningar ProcessID =" + CStr (processID))Avsluta Sub |
På den första raden öppnas NotePad och Process -ID tilldelas ett värde av Windows. Vi lagrar detta värde i ProcessID -variabeln. Vi använder sedan TaskKill för att tvinga Notepad att stänga instansen av NotePad som vi just har öppnat. De /F växla krafter Anteckningsblock att avsluta, och /PID växeln berättar TaskKill att leta efter anteckningsblocket Process -ID värde. CStr -funktionen konverterar ProcessID till det strängformat som Shell och MsgBox på nästa rad behöver båda.
Trött på att söka efter exempel på VBA -kod? Prova AutoMacro!
VBA -programmering | Kodgenerator fungerar för dig!
Ringa andra program med Shell
Shell öppnar alla andra Windows -program. Till exempel ringer den här koden Excel, och öppnar Excel -filen ‘example_workbook.xlsx’:
1 | Call Shell ("Excel" "C: \ DEMO \ example_workbook.xlsx" "", vbNormalFocus) |
Detta visar den öppnade filen:
ShellExecute och ShellExecuteEx vs Shell Command
Windows programmeringsutrymme erbjuder ShellExecute och ShellExecuteEx funktioner som anropar externa program från programvarukod. Jämfört med VBA Shell -funktionen erbjuder dessa Windows -funktioner mer flexibilitet, men VBA stöder dem inte och därför täcker denna artikel inte dem.