VBA Shell

See õpetus näitab, kuidas VBA Shelli funktsiooni kasutada.

Saame kasutada VBA -d Kest funktsioon, et kutsuda eraldi käivitatav programm VBA programmi seest. Näiteks kui meil on vaja Notepad Excelist avada, saame selleks kasutada funktsiooni VBA Shell. Kui Shelli kõne õnnestub, tagastab see selle programmi Windowsi TaskID väärtuse, mida ta kutsus. Kui Shelli kõne ebaõnnestub, tagastab see nulli.

Kest sellel on kaks sisendparameetrit: a nõutav tee nimi programmi helistamiseks ja valikuline akna stiil väärtus, mis kontrollib programmi käivitamise akna stiili. The tee nimi väärtus võib sisaldada programmi teed / kataloogi ja argumente.

Helistage Shellile

See kood võib olla käivitatava makro osa Märkmik kasutades VBA kõne käsk helistada Kest funktsiooni.

1 Helista Shellile ("märkmik", vbNormalFocus)

Näiteks:

Shell Oota

Saame kasutada VBA -d Oota käsku helistada Kest käsku teatud aja jooksul.

12 Application.Wait (Now + TimeValue ("00:00:05"))Helista Shellile ("märkmik", vbNormalFocus)

Seetõttu möödub enne Shelli käsu kutsumist 5 sekundit.

Vea tagastamine kesta funktsioonist

Kui meil on koodis helistamisel viga Kest funktsiooni ja viga tagastatakse ning meie kood läheb silumisrežiimi.

Näiteks selles makros oleme märkuspaberi valesti kirjutanud.

1 Helista Shellile ("märkmik", vbNormalFocus)

Selle makro käitamise tulemus on järgmine:

VBA programmeerimine | Koodigeneraator töötab teie jaoks!

Avage Shelliga olemasolev fail

Kui meil on konkreetne fail, mida soovime avada Kest käsu, saame lisada faili koodi oma koodi.

1 Helista Shellile ("Notepad.exe C: \ demo \ shell_test.txt", vbNormalFocus)

Kui kirjutame faili nime valesti, siis faili ei leita ja kuvatakse teade, kus küsitakse, kas soovime uue faili luua.

Funktsiooni Shell kasutatavad parameetrid

The Kest funktsioonil on 2 parameetrit - kutsutava programmi nimi ja Windowsi stiil, mida programm kasutab. Oleme kasutanud vbNormalFocus ülaltoodud näidetes, mis tähendab, et kui programm (antud juhul Notepad) avatakse, on sellel fookus ja see avaneb arvuti vaikeasendis ja suuruses.

The Kest pakub veel viit võimalust:

vbPeida Peidab akna ja keskendub sellele aknale

vbMinimeeritud fookus Kuvab akna fookusega ikoonina

vbMaksimeeritud fookus Avab programmi maksimeeritud aknas fookusega

vbNormalNoFocus Taastab akna viimase asukoha ja suuruse

vbMinimeeritudNoFocus Kuvab akna ikoonina ja parajasti aktiivne aken jääb aktiivseks

Protsessi ID tagastamine Shelli käsust

Kui me käivitame Kest Käsk, see tagastab protsessi või ülesande ID. Me võime salvestada protsessi ID muutujale ja kasutada seda protsessi ID -d mõne muu käsu - näiteks TaskKill käsk Notepad -faili sulgemiseks.

123456 Alam TestPIDHämardage protsessi ID täisarvunaprocessID = kest ("märkmik", vbNormalFocus)Helista Shellile ("Taskkill /F /PID" + CStr (protsessiID))MsgBox ("Notepad ProcessID =" + CStr (protsessiID))End Sub

Esimesel real avatakse NotePad ja Windows määrab protsessi ID -le väärtuse. Salvestame selle väärtuse muutujat ProcessID. Seejärel kasutame TaskKilli, et sundida Notepad äsja avatud NotePadi eksemplar sulgema. The /F lülitage jõud Märkmik lõpetada ja /PID lüliti ütleb TaskKill märkmikku otsima Protsessi ID väärtus. Funktsioon CStr teisendab ProcessID stringivormingusse, mida Shell ja MsgBox järgmisel real vajavad.

Kas olete väsinud VBA koodinäidete otsimisest? Proovige AutoMacrot!

VBA programmeerimine | Koodigeneraator töötab teie jaoks!

Teiste programmide helistamine Shelli abil

Shell avab mis tahes muu Windowsi programmi. Näiteks see kood kutsub Excelja avab Exceli faili "example_workbook.xlsx":

1 Helista Shellile ("Excel" "C: \ DEMO \ example_workbook.xlsx" "", vbNormalFocus)

See näitab avatud faili:

ShellExecute ja ShellExecuteEx vs Shelli käsk

Windowsi programmeerimisruum pakub ShellExecute ja ShellExecuteEx funktsioonid, mis kutsuvad tarkvarakoodist väliseid programme. Võrreldes VBA Shelli funktsiooniga pakuvad need Windowsi funktsioonid suuremat paindlikkust, kuid VBA ei toeta neid ja seetõttu ei hõlma käesolev artikkel neid.

Te aitate arengu ala, jagades leht oma sõpradega

wave wave wave wave wave