- Bel Shell
- Shell wacht
- Een fout retourneren vanuit de Shell-functie
- Een bestaand bestand openen met Shell
- Parameters die worden gebruikt door de Shell-functie
- Een proces-ID retourneren vanuit het Shell-commando
- Andere programma's bellen met Shell
- ShellExecute en ShellExecuteEx versus het Shell-commando
Deze zelfstudie laat zien hoe u de VBA Shell-functie gebruikt.
We kunnen de VBA gebruiken Schelp functie om een afzonderlijk, uitvoerbaar programma aan te roepen vanuit een VBA-programma. Als we bijvoorbeeld Kladblok vanuit Excel moeten openen, kunnen we de VBA Shell-functie gebruiken om dit te doen. Als de Shell-aanroep slaagt, wordt de Windows TaskID-waarde van het aangeroepen programma geretourneerd. Als de Shell-aanroep mislukt, wordt nul geretourneerd.
Schelp heeft twee invoerparameters: a vereist padnaam om het programma aan te roepen, en een optionele raamstijl waarde die de stijl bepaalt van het venster waarin het programma wordt uitgevoerd. De padnaam waarde kan het programmapad / de map en argumenten bevatten.
Bel Shell
Deze code kan deel uitmaken van een uit te voeren macro Kladblok met behulp van de VBA-oproep commando om de . te bellen Schelp functie.
1 | Bel Shell ("kladblok", vbNormalFocus) |
Bijvoorbeeld:
Shell wacht
We kunnen de VBA gebruiken Wacht commando om het bellen uit te stellen Schelp opdracht voor een bepaalde tijd.
12 | Application.Wait (Now + TimeValue("00:00:05"))Bel Shell ("kladblok", vbNormalFocus) |
Daarom duurt het 5 seconden voordat het Shell-commando wordt aangeroepen.
Een fout retourneren vanuit de Shell-functie
Als we een fout in onze code hebben bij het aanroepen van de Schelp functie, en de fout wordt geretourneerd en onze code gaat in de foutopsporingsmodus.
In deze macro hebben we bijvoorbeeld "notitieblok" verkeerd gespeld.
1 | Bel Shell ("notitieblok", vbNormalFocus) |
Het resultaat van het uitvoeren van deze macro is:
VBA-programmering | Code Generator werkt voor u!
Een bestaand bestand openen met Shell
Als we een specifiek bestand hebben dat we willen openen met de Schelp commando, kunnen we de bestandsnaam in onze code opnemen.
1 | Roep Shell aan ("Notepad.exe C:\demo\shell_test.txt", vbNormalFocus) |
Als we de bestandsnaam verkeerd spellen, wordt het bestand niet gevonden en verschijnt er een berichtvenster met de vraag of we een nieuw bestand willen maken.
Parameters die worden gebruikt door de Shell-functie
De Schelp functie heeft 2 parameters - de naam van het programma dat moet worden aangeroepen en de Windows-stijl die het programma gaat gebruiken. We hebben de vbNormaalFocus in de bovenstaande voorbeelden, wat betekent dat wanneer het programma (in dit geval Kladblok) wordt geopend, het de focus heeft en het wordt geopend in de standaardpositie en -grootte op de pc.
De Schelp biedt vijf andere opties:
vbVerbergen Verbergt het venster en stelt de focus op dat venster in
vbMinimizedFocus Geeft het venster weer als een pictogram met focus
vbMaximizedFocus Opent het programma in een gemaximaliseerd venster met focus
vbNormaalGeenFocus Herstelt het venster op de meest recente positie en grootte
vbGeminimaliseerdNoFocus Geeft het venster weer als een pictogram en het huidige actieve venster blijft actief
Een proces-ID retourneren vanuit het Shell-commando
Wanneer we de Schelp Commando, het retourneert een proces- of taak-ID. We kunnen de proces-ID in een variabele opslaan en die proces-ID gebruiken bij het uitvoeren van een ander commando - bijvoorbeeld de TaskKill commando om het Kladblok-bestand te sluiten.
123456 | Sub TestPIDDim ProcessID als geheel getalprocessID = Shell ("kladblok", vbNormalFocus)Bel Shell ("Taskkill /F /PID" + CStr(proces-ID))MsgBox ("Notepad ProcessID = " + CStr(processID))Einde sub |
In de eerste regel wordt Kladblok geopend en krijgt de proces-ID een waarde toegewezen door Windows. Deze waarde slaan we op in de ProcessID variabele. Vervolgens gebruiken we TaskKill om Kladblok te dwingen het exemplaar van Kladblok te sluiten dat we zojuist hebben geopend. De /F schakel krachten Kladblok eindigen, en de /PID schakelaar vertelt TaskKill om het Kladblok te zoeken Proces-ID waarde. De CStr-functie converteert ProcessID naar het tekenreeksformaat dat Shell en MsgBox op de volgende regel beide nodig hebben.
Moe van het zoeken naar voorbeelden van VBA-codes? Probeer AutoMacro!
VBA-programmering | Code Generator werkt voor u!
Andere programma's bellen met Shell
Shell zal elk ander Windows-programma openen. Deze code roept bijvoorbeeld Excel, en opent Excel-bestand 'example_workbook.xlsx':
1 | Roep Shell("Excel ""C:\DEMO\example_workbook.xlsx""", vbNormalFocus) aan |
Dit toont het geopende bestand:
ShellExecute en ShellExecuteEx versus het Shell-commando
De Windows-programmeerruimte biedt: ShellExecute en ShellExecuteEx functies die externe programma's aanroepen vanuit softwarecode. In vergelijking met de VBA Shell-functie bieden deze Windows-functies meer flexibiliteit, maar VBA ondersteunt ze niet en daarom behandelt dit artikel ze niet.