VBA skal

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.

Du vil bidrage til udviklingen af ​​hjemmesiden, at dele siden med dine venner

wave wave wave wave wave