Denne opplæringen vil demonstrere hvordan du bruker VBA Shell -funksjonen.
Vi kan bruke VBA Skall funksjon for å kalle et eget, kjørbart program fra et VBA -program. For eksempel, hvis vi trenger å åpne Notisblokk fra Excel, kan vi bruke VBA Shell -funksjonen til å gjøre det. Hvis Shell -anropet lykkes, returnerer det Windows TaskID -verdien til programmet det kalte. Hvis Shell -anropet mislykkes, returnerer det null.
Skall har to inngangsparametere: en nødvendig banenavn for at programmet skal ringe, og valgfritt vindusstil verdi som styrer stilen i vinduet der programmet skal kjøres. De banenavn verdi kan inneholde programbanen / katalogen og argumenter.
Ring Shell
Denne koden kan være en del av en makro som skal kjøres Notisblokk ved å bruke VBA -samtale kommando for å ringe Skall funksjon.
1 | Call Shell ("notisblokk", vbNormalFocus) |
For eksempel:
Shell Vent
Vi kan bruke VBA Vente kommando for å utsette å ringe Skall kommando for en bestemt tidsperiode.
12 | Application.Wait (Now + TimeValue ("00:00:05"))Call Shell ("notisblokk", vbNormalFocus) |
Derfor vil 5 sekunder passere før Shell -kommandoen kalles.
Returnerer en feil fra skallfunksjonen
Hvis vi har en feil i koden vår når vi ringer Skall funksjon, og feilen returneres, og koden vår går inn i feilsøkingsmodus.
For eksempel, i denne makroen har vi stavet "notatblokk" feil.
1 | Call Shell ("notatblokk", vbNormalFocus) |
Resultatet av å kjøre denne makroen vil være:
VBA -programmering | Kodegenerator fungerer for deg!
Åpne en eksisterende fil med skall
Hvis vi har en bestemt fil som vi ønsker å åpne med Skall kommando, kan vi inkludere filnavnet i koden vår.
1 | Ring Shell ("Notepad.exe C: \ demo \ shell_test.txt", vbNormalFocus) |
Hvis vi stavet filnavnet feil, blir ikke filen funnet, og det kommer en meldingsboks som spør oss om vi ønsker å opprette en ny fil.
Parametere som brukes av Shell -funksjonen
De Skall funksjonen har to parametere - navnet på programmet du vil ringe, og Windows -stilen som programmet skal bruke. Vi har brukt vbNormalFocus i eksemplene ovenfor, noe som betyr at når programmet (i dette tilfellet Notisblokk) åpnes, har det fokus og det åpnes i standardposisjonen og størrelsen på PC -en.
De Skall tilbyr fem andre alternativer:
vbHide Skjuler vinduet og setter fokus på det vinduet
vbMinimizedFocus Viser vinduet som et ikon med fokus
vbMaksimert fokus Åpner programmet i et maksimert vindu med fokus
vbNormalNoFocus Gjenoppretter vinduet i sin siste posisjon og størrelse
vbMinimizedNoFocus Viser vinduet som et ikon, og det aktive vinduet forblir aktivt
Returnerer en prosess -ID fra Shell -kommandoen
Når vi kjører Skall Kommando, den returnerer en prosess- eller oppgave -ID. Vi kan lagre prosess -ID -en i en variabel, og bruke denne prosess -ID -en til å kjøre en annen kommando - for eksempel TaskKill kommando for å lukke Notisblokk -filen.
123456 | Sub TestPIDDim ProcessID som heltallprocessID = Shell ("notisblokk", vbNormalFocus)Call Shell ("Taskkill /F /PID" + CStr (processID))MsgBox ("Notisblokk ProcessID =" + CStr (prosessID))Slutt Sub |
På den første linjen åpnes NotePad og prosess -IDen tildeles en verdi av Windows. Vi lagrer denne verdien i ProcessID -variabelen. Vi bruker deretter TaskKill til å tvinge Notisblokk til å lukke forekomsten av NotePad som vi nettopp har åpnet. De /F bytte krefter Notisblokk til slutt, og /PID bryteren forteller TaskKill å se etter Notisblokken Prosess -ID verdi. CStr -funksjonen konverterer ProcessID til strengformatet som Shell og MsgBox på neste linje, begge trenger.
Lei av å søke etter eksempler på VBA -kode? Prøv AutoMacro!
VBA -programmering | Kodegenerator fungerer for deg!
Ringer andre programmer med Shell
Shell åpner alle andre Windows -programmer. Denne koden ringer for eksempel utmerke, og åpner Excel -filen ‘example_workbook.xlsx’:
1 | Call Shell ("Excel" "C: \ DEMO \ example_workbook.xlsx" "", vbNormalFocus) |
Dette viser den åpnede filen:
ShellExecute og ShellExecuteEx vs Shell Command
Windows -programmeringsområdet tilbyr ShellExecute og ShellExecuteEx funksjoner som kaller eksterne programmer fra programvarekode. Sammenlignet med VBA Shell -funksjonen, tilbyr disse Windows -funksjonene mer fleksibilitet, men VBA støtter dem ikke, og derfor dekker denne artikkelen dem ikke.