Töö Excel VBA makrodega
Exceli makrod salvestatakse VBA -koodina ja mõnikord soovite seda koodi otse muuta. See õpetus hõlmab makrode vaatamist ja muutmist, kirjeldab mõningaid makro silumise meetodeid ja toob mõned tavalised näited redigeerimiseks.
Vaadake makrosid
Makrode loendit saab kuvada dialoogis Makrod. Selle dialoogi vaatamiseks valige lindil vahekaart Arendaja ja klõpsake nuppu Makrod.
Kui avatud on mitu töövihikut, kuvatakse loendis kõigi töövihikute makrosid. Aktiivse töövihiku makrosid kuvatakse ainult nime järgi, samas kui teiste töövihikute makrosid tähistavad töövihiku nimi ja hüüumärk (nt „Raamat2! MuuMakro”).
Avage redigeerimiseks makro
Makro dialoogi abil saate makro koodi avada, valides makro nime ja klõpsates nuppu Muuda. See avab makro VB redaktoris.
Teise võimalusena saate VB redaktori avada otse, klõpsates vahekaardil Arendaja nuppu Visual Basic või vajutades kiirklahvi ALT+F11.
Seda meetodit kasutades peate navigeerima soovitud makro juurde (mida nimetatakse ka protseduuriks). Me vaatame üle VBA redaktori paigutuse:
Ülevaade VB redaktorist
VB redaktoril on mitu akent; selles õpetuses käsitleme projektiakent, atribuutide akent ja koodiakent.
Projekti aken
Projektiaken näitab iga Exceli faili oma projektina, kõik selle projekti objektid on liigitatud tüübi järgi. Salvestatud makrod kuvatakse kategoorias „Moodulid”, tavaliselt objektis “Moodul1”. (Kui teie projektil on mitu moodulit ja te pole kindel, kuhu teie makro on salvestatud, avage see lihtsalt ülalnimetatud makrodialoogist.)
Atribuutide aken
Atribuutide aken näitab objekti atribuute ja nendega seotud väärtusi - näiteks projekti aknas töölehe objektil klõpsates kuvatakse töölehe atribuutide loend. Kinnisvara nimed on vasakul ja kinnisvara väärtused paremal.
Mooduli valimine aknas Projekt näitab, et sellel on ainult üks atribuut “(Nimi)”. Mooduli nime saate muuta, topeltklõpsates atribuudi väärtust, tippides uue nime ja vajutades sisestusklahvi. Mooduli nime muutmine nimetab selle projektiaknas ümber, mis on kasulik, kui teil on palju mooduleid.
Koodaknad
Koodiaknad on spetsiaalsed tekstiredaktorid, milles saate muuta oma makro VBA -koodi. Kui soovite näha moodulis 1 asuva makro koodi, topeltklõpsake projektiaknas nuppu „Moodul1”.
Makrode käitamine VB redaktoris
Makrosid saab käivitada otse VB redaktorist, mis on kasulik testimiseks ja silumiseks.
Makro käitamine
- Topeltklõpsake projektiaknas moodulit, mis sisaldab katsetatavat makro (selle koodi akna avamiseks)
- Asetage aknas Kood kursor suvalises kohas makro koodil „Sub” ja „End Sub” vahele.
- Klõpsake Jookse nuppu tööriistaribal või vajutage kiirklahvi F5
Makro "samm-sammult"
Selle asemel, et makro korraga käivitada, saate makro käivitada üks rida korraga, kasutades koodi läbimiseks klaviatuuri otseteed. Makro peatatakse igal real, võimaldades teil tagada, et iga koodirida teeb seda, mida Excelis ootate. Selle meetodi abil saate ka makro jätkamise igal ajal peatada.
Makro "läbimiseks" tehke järgmist.
- Topeltklõpsake projektiaknas moodulit, mis sisaldab katsetatavat makro (selle koodi akna avamiseks)
- Asetage aknas Kood kursor suvalisele kohale makro koodis
- Vajutage kiirklahvi F8, et alustada „samm-sammult”
- Vajutage korduvalt klahvi F8, et edendada koodi täitmist, mida näitab kollane esiletõst koodiaknas
- Makro jätkamise peatamiseks vajutage Lähtesta nuppu
Miks muuta VBA makrosid?
Makromagnetofon - kuigi tõhus - on samuti väga piiratud. Mõnel juhul tekitab see aeglaseid makrosid, salvestab toiminguid, mida te ei kavatsenud korrata, või salvestab asju, mida te ei arvanud, et teete. Makrode muutmise õppimine aitab neil kiiremini, tõhusamalt ja paremini ette näha.
Lisaks nende probleemide lahendamisele saate ka makrosid täies ulatuses kasutades märkimisväärselt tõsta tootlikkust. Makrod ei pea olema ainult ülesannete salvestused - makrod võivad sisaldada loogikat, nii et nad täidavad ülesandeid ainult teatud tingimustel. Vaid paari minutiga saate kodeerida ahelaid, mis kordavad ülesannet sadu või tuhandeid kordi korraga!
Allpool leiate mõningaid näpunäiteid makrokoodi optimeerimiseks, samuti tööriistu, mis muudavad teie makrod raskemaks ja nutikamaks.
Tavalised makro redigeerimise näited
Makrod kiirendada
Kui teil on makro, mille käitamine võtab kaua aega, võib selle aeglasel töötamisel olla paar põhjust.
Ühe jaoks: kui makro töötab, näitab Excel kõike reaalajas, kuigi see juhtub vaata sulle kiire, tegelikultnäidates töö on märkimisväärne jõudlushitt. Üks võimalus Excelit oluliselt kiiremini tööle panna on seda öelda lõpetage ekraani värskendamine:
"Keela ekraani värskendamise rakendus. ScreenUpdating = vale" Luba ekraani värskendamise rakendus. ScreenUpdating = Tõsi
Rida „Application.ScreenUpdating = False” tähendab, et makro ei tööta, kuid see töötab palju kiiremini. Pange tähele, et peaksite oma makro lõpus alati määrama ScreenUpdating väärtuseks True, vastasel juhul ei pruugi Excel toimida nii, nagu te hiljem ootate!
Veel üks viis makrode kiirendamiseks:lülitage makro automaatne arvutamine välja. Kui olete töötanud keerukate arvutustabelitega, teate, et väikesed muudatused võivad käivitada tuhandeid arvutusi, mille valmimine võtab aega, mistõttu paljud inimesed lülitavad Exceli suvandites automaatse arvutamise välja. Saate seda ka VBA -koodiga vahetada, nii et teie makro töötab teistes arvutites endiselt kiiresti. See aitab juhtudel, kui kopeerite ja kleepite palju valemilahtreid või käivitate palju arvutusi, kui kleepite andmeid vahemikku.
"Keela automaatse arvutamise rakendus. Arvutus = xlCalculationManual" Luba automaatarvutusrakendus. Arvutus = xl
Lisage silmuseid ja loogikat (kui avaldused)
Makrosalvesti salvestab kõik teie toimingud koodina keeles nimega VBA. VBA on rohkem kui lihtsalt Excelis toimingute salvestamise viis - see on programmeerimiskeel, mis tähendab, et see võib sisaldada koodi otsuste tegemiseks vajalike toimingute tegemiseks või toimingute kordamiseks, kuni tingimus on täidetud.
Silmus
Oletame, et tahtsite teha aruande koostanud makro ja selle makro osana pidite töövihikusse lisama üheksateist lehte, kokku kakskümmend. Võite salvestada ennast, klõpsates nupul (+) ikka ja jälle, või kirjutada silmuse, mis kordab toimingut teie jaoks järgmiselt:
AlamaruannePrep () Dim i nii kaua, kui i = 1 kuni 19 lehte. Lisage järgmine i End Sub
Selles näites kasutame a Silmuse jaoks, mis on omamoodi tsükkel, mis kordab läbi erinevate üksuste. Siin on meie vahemik numbrid 1 kuni 19, kasutades muutujat nimega „i”, et tsükkel saaks jälgida. Meie silmuse sees korratakse ainult ühte toimingut eest jajärgmine read (lehe lisamine), kuid saate lisada silmusesse nii palju koodi, kui soovite, näiteks lehe vormindamiseks, või kopeerida ja kleepida andmeid igale lehele - mida iganes soovite korrata.
Kui avaldused
An Kui avaldus kasutatakse otsustamiseks, kas mõni kood töötab või mitte, kasutades otsuse tegemiseks loogilist testi. Siin on lihtne näide:
Sub ClearIfSmall () If Selection.Value <100 then Selection. Tühjenda lõpp, kui lõpp Alam
See lihtne näide näitab If -lause toimimist - testite mõnda tingimust, mis on tõene või vale (kas valitud lahtri väärtus on väiksem kui 100?) ja kui test tagastab tõese, käivitub sees olev kood.
Selle koodi puuduseks on see, et see testib korraga ainult ühte lahtrit (ja ebaõnnestub, kui valite mitu lahtrit). See oleks kasulikum, kui saaksite … iga valitud lahtri läbi vaadata ja igaüks testida …
Alam ClearIfSmall () Dim c Iga vahemiku valiku korral. Lahtrid Kui c.Väärtus <100 Siis c. Tühjenda lõpp, kui järgmine c Lõpp alam
Selles näites on silmuse jaoks veidi erinev - see ei liigu läbi arvude vahemiku, vaid liigub läbi kõik valitud lahtrid, kasutades jälgimiseks muutujat nimega „c”. Silmuse sees kasutatakse väärtust „c”, et teha kindlaks, kas lahter tuleb tühjendada või mitte.
Silmuseid ja If -lauseid saab kombineerida mis tahes meelepärasel viisil - võite panna silmuseid silmuste sisse või ühe Kui teise sisse, või kasutage If -i, et otsustada, kas silmus peaks üldse käima.
<<>>
Kerimisefektide eemaldamine
Makrokoodi muutmise tavaline põhjus on ekraani kerimise eemaldamine. Makro salvestamisel peate võib -olla kerima töölehe teistesse piirkondadesse, kuid makrod ei pea andmetele juurdepääsemiseks kerima.
Kerimine võib teie koodi segada sadade või isegi tuhandete ridade tarbetu koodiga. Siin on näide koodist, mis salvestatakse kerimisribal klõpsamisel ja lohistamisel:
Selline kood on täiesti tarbetu ja selle saab kustutada, ilma et see mõjutaks muid funktsioone. Isegi kui soovite kerimist säilitada, võib selle koodi ikkagi silmusesse koondada.
Eemaldage üleliigne kood
Salvestatud makrod lisavad tavaliselt palju üleliigset koodi, mis ei pruugi kajastada seda, mida soovite makro teha. Võtke näiteks järgmine salvestatud kood, mis salvestab lahtris fondi nime muutmise:
Kuigi muudeti ainult fondi nime, registreeriti üksteist (11) fondimuutust, näiteks fondi suurus, tekstiefektid jne. Kui makro eesmärk oli muuta ainult fondi nime (jättes kõik muud omadused üksi) salvestatud makro ei töötaks!
Seda makro on võimalik muuta nii, et see muudab ainult fondi nime:
See makro mitte ainult ei tööta praegu ettenähtud viisil, vaid seda on ka palju lihtsam lugeda.
Eemaldage kursori liigutused
Teine asi, mida makrosse salvestatakse, on tööleht ja lahtrivalik. See on probleem, sest kui kursor liigub pärast makro käivitamist teisele kohale, võib kasutaja lihtsalt kaotada selle, millega ta parasjagu tegeles.
Nagu kerimise puhul, sina võib -olla peate ülesande täitmiseks kursorit liigutama ja erinevaid lahtreid valima, kuid makrod ei pea andmetele juurdepääsemiseks kursorit kasutama. Mõelge järgmisele koodile, mis kopeerib vahemiku ja kleebib selle kolmele teisele lehele:
Selle koodiga on paar probleemi:
- Kasutaja kaotab oma eelmise koha töövihikus
- Makro ei määra, millist lehte me kopeerimealates - see võib olla probleem, kui makro käivitati valel lehel
Lisaks on koodi raske lugeda ja see on raiskav. Neid probleeme saab lahendada piisavalt lihtsalt:
Selles koodis on selgelt näha, et me kopeerime lehelt 1 ning andmete kleepimiseks ei pea aktiivne tööleht ega valitud vahemik muutuma. (Üks oluline muudatus on „Paste” asemel „PasteSpecial” kasutamine - vahemiku objektidel, nagu „Range („ C4 ″ ”), on juurdepääs ainult käsule PasteSpecial.)
Kui kood on täis viiteid „.Select” ja „Selection”, on aimugi, et seda koodi on võimalik optimeerida ja tõhusamaks muuta.
