Denne vejledning viser, hvordan du bruger VBA Shell -funktionen.
Vi kan bruge VBA Skal funktion til at kalde et separat, eksekverbart program inde fra et VBA -program. For eksempel, hvis vi skal åbne Notesblok fra Excel, kan vi bruge VBA Shell -funktionen til at gøre det. Hvis Shell -opkaldet lykkes, returnerer det Windows TaskID -værdien for det program, det kaldte. Hvis Shell -opkaldet mislykkes, returnerer det nul.
Skal har to inputparametre: et påkrævet stinavn for at programmet skal ringe, og en valgfri vinduesstil værdi, der styrer stilen i vinduet, hvor programmet kører. Det stinavn værdi kan indeholde programstien / biblioteket og argumenter.
Ring til Shell
Denne kode kan udgøre en del af en makro, der skal køres Notesblok ved at bruge VBA -opkald kommando for at ringe til Skal fungere.
1 | Call Shell ("notesblok", vbNormalFocus) |
For eksempel:
Shell Vent
Vi kan bruge VBA Vente kommando for at udsætte opkaldet til Skal kommando i en bestemt periode.
12 | Application.Wait (Nu + TimeValue ("00:00:05"))Call Shell ("notesblok", vbNormalFocus) |
Derfor går der 5 sekunder, før Shell -kommandoen kaldes.
Returnering af en fejl fra shell -funktionen
Hvis vi har en fejl i vores kode, når vi ringer til Skal funktion, og fejl returneres, og vores kode går i fejlfindingstilstand.
For eksempel har vi i denne makro stavet "note pad" forkert.
1 | Call Shell ("note pad", vbNormalFocus) |
Resultatet af at køre denne makro vil være:
VBA -programmering | Kodegenerator virker for dig!
Åbn en eksisterende fil med shell
Hvis vi har en bestemt fil, som vi ønsker at åbne med Skal kommando, kan vi inkludere filnavnet i vores kode.
1 | Ring til Shell ("Notepad.exe C: \ demo \ shell_test.txt", vbNormalFocus) |
Hvis vi stave filnavnet forkert, findes filen ikke, og der vises en meddelelsesboks, der spørger os, om vi ønsker at oprette en ny fil.
Parametre, der bruges af Shell -funktionen
Det Skal funktionen har 2 parametre - navnet på det program, der skal kaldes, og den Windows -stil, programmet skal bruge. Vi har brugt vbNormalFocus i eksemplerne ovenfor, hvilket betyder, at når programmet (i dette tilfælde Notesblok) åbnes, har det fokus, og det åbnes i standardpositionen og størrelsen på pc'en.
Det Skal tilbyder fem andre muligheder:
vbHide Skjuler vinduet og sætter fokus på det vindue
vbMinimizedFocus Viser vinduet som et ikon med fokus
vbMaksimeret fokus Åbner programmet i et maksimeret vindue med fokus
vbNormalNoFocus Gendanner vinduet på sin seneste position og størrelse
vbMinimizedNoFocus Viser vinduet som et ikon, og det aktuelt aktive vindue forbliver aktivt
Returnering af et proces -id fra Shell -kommandoen
Når vi kører Skal Kommando, det returnerer et proces- eller opgave -id. Vi kan gemme proces -id'et i en variabel og bruge dette proces -id til at køre en anden kommando - f.eks TaskKill kommando for at lukke Notesblok -filen.
123456 | Sub TestPIDDim ProcessID som heltalprocessID = Shell ("notesblok", vbNormalFocus)Call Shell ("Taskkill /F /PID" + CStr (processID))MsgBox ("Notesblok ProcessID =" + CStr (processID))Afslut Sub |
I den første linje åbnes NotePad, og proces -id'et tildeles en værdi af Windows. Vi gemmer denne værdi i ProcessID -variablen. Vi bruger derefter TaskKill til at tvinge Notesblok til at lukke forekomsten af NotePad, som vi lige har åbnet. Det /F skifte kræfter Notesblok at afslutte, og /PID switch fortæller TaskKill at lede efter Notesblok Proces -id værdi. CStr -funktionen konverterer ProcessID til det strengformat, som Shell og MsgBox på den næste linje har begge brug for.
Træt af at søge efter eksempler på VBA -kode? Prøv AutoMacro!
VBA -programmering | Kodegenerator virker for dig!
Opkald til andre programmer med Shell
Shell åbner ethvert andet Windows -program. For eksempel kalder denne kode Excel, og åbner Excel -filen 'eksempel_arbejde.xlsx':
1 | Ring til Shell ("Excel" "C: \ DEMO \ example_workbook.xlsx" "", vbNormalFocus) |
Dette viser den åbnede fil:
ShellExecute og ShellExecuteEx vs Shell Command
Windows -programmeringsrummet tilbyder ShellExecute og ShellExecuteEx funktioner, der kalder eksterne programmer fra softwarekode. Sammenlignet med VBA Shell -funktionen tilbyder disse Windows -funktioner mere fleksibilitet, men VBA understøtter dem ikke, og derfor dækker denne artikel dem ikke.