VBA -skall

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.

wave wave wave wave wave