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.

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave