Urejanje makrov Excel VBA

Delo z makri Excel VBA

Makri v Excelu so shranjeni kot koda VBA, včasih pa boste morali to kodo urediti neposredno. Ta vadnica bo zajela, kako si ogledate in uredite makre, opišete nekatere tehnike odpravljanja napak pri makrih in navedete nekaj pogostih primerov urejanja.

Ogled makrov

Seznam makrov je lahko prikazan v pogovornem oknu Makri. Za ogled tega pogovornega okna izberite zavihek Razvijalec na traku in kliknite gumb Makri.

Če je odprtih več delovnih zvezkov, bodo na seznamu prikazani makri iz vseh delovnih zvezkov. Makri v aktivnem delovnem zvezku se bodo pojavili samo po imenu, makroi v drugih delovnih zvezkih pa bodo imeli predpono z imenom delovnega zvezka in klicajem (npr. »Book2! OtherMacro«).

Odprite makro za urejanje

Kodo za makro lahko odprete v pogovornem oknu Makro, tako da izberete ime makra in kliknete gumb Uredi. To bo odprlo makro v urejevalniku VB.

Druga možnost je, da urejevalnik VB odprete neposredno s klikom na gumb Visual Basic na zavihku Razvijalec ali s pritiskom na bližnjico na tipkovnici ALT+F11.

S to metodo se boste morali pomakniti do želenega makra (imenovan tudi "postopek"). Preučili bomo postavitev urejevalnika VBA:

Pregled urejevalnika VB

Urejevalnik VB ima več oken; v tej vadnici bomo obravnavali okno projekta, okno lastnosti in okno kode.

Okno projekta

Okno projekta prikazuje vsako Excelovo datoteko kot lasten projekt, pri čemer so vsi predmeti v tem projektu razvrščeni po vrsti. Posneti makri bodo prikazani v kategoriji »Moduli«, ponavadi v objektu »Modul1«. (Če ima vaš projekt več modulov in niste prepričani, kje je shranjen vaš makro, ga preprosto odprite v prej omenjenem pogovornem oknu Makri.)

Okno lastnosti

Okno lastnosti prikaže lastnosti in povezane vrednosti predmeta - na primer s klikom na predmet delovnega lista v oknu projekta se prikaže seznam lastnosti za delovni list. Imena lastnosti so na levi, vrednosti lastnosti pa na desni.

Če izberete modul v oknu Project, bo prikazano, da ima samo eno lastnost, “(Name)”. Ime modula lahko spremenite tako, da dvokliknete vrednost lastnosti, vnesete novo ime in pritisnete Enter. Če spremenite ime modula, ga boste preimenovali v okno projekta, kar je koristno, če imate veliko modulov.

Kodirana okna

Okna kod so posebni urejevalniki besedil, v katerih lahko urejate kodo VBA svojega makra. Če želite videti kodo za makro, ki se nahaja v modulu1, bi v oknu projekta dvakrat kliknili »Modul1«.

Izvajanje makrov v urejevalniku VB

Makre lahko zaženete neposredno iz urejevalnika VB, kar je uporabno za testiranje in odpravljanje napak.

Izvajanje makra

  • V oknu Project dvokliknite modul, ki vsebuje makro, ki ga želite preizkusiti (odpre se okno Code)
  • V oknu za kodo postavite kazalec kjer koli na kodi makra med "Sub" in "End Sub"
  • Kliknite na Teči na orodni vrstici ali pritisnite bližnjico na tipkovnici F5

»Prekoračni« makro

Namesto da bi makro zagnali naenkrat, ga lahko zaženete po eno vrstico z bližnjico na tipkovnici, da "prestopite" kodo. Makro se bo ustavil v vsaki vrstici, kar vam bo omogočilo, da vsaka vrstica kode naredi tisto, kar pričakujete v Excelu. S to metodo lahko kadar koli ustavite nadaljevanje makra.

Če želite "prestopiti" makro:

  • V oknu Project dvokliknite modul, ki vsebuje makro, ki ga želite preizkusiti (odpre se okno Code)
  • V oknu Koda postavite kazalec kjer koli na kodi makra
  • Pritisnite bližnjico na tipkovnici F8 za začetek postopnega postopka
  • Večkrat pritisnite F8 za napredovanje izvajanja kode, kar označuje rumena oznaka v oknu Code
  • Če želite ustaviti nadaljevanje makra, pritisnite tipko Ponastaviti gumb

Zakaj urejati makre VBA?

Makro snemalnik - čeprav je učinkovit - je tudi zelo omejen. V nekaterih primerih ustvari počasne makre, zabeleži dejanja, ki jih niste nameravali ponoviti, ali zabeleži stvari, za katere niste mislili, da delate. Če se naučite urejati svoje makre, jim bo pomagalo hitreje, učinkoviteje in bolj predvidljivo.

Poleg tega, da boste odpravili te težave, boste tudi, ko boste izkoristili vso moč makrov, močno povečali produktivnost. Makri niso samo posnetki opravil - makri lahko vključujejo logiko, tako da opravijo naloge le pod določenimi pogoji. V samo nekaj minutah lahko kodirate zanke, ki naenkrat na stotine ali tisočkrat ponovijo nalogo!

Spodaj boste našli nekaj priročnih nasvetov, ki vam bodo pomagali optimizirati kodo makra, pa tudi orodja, s katerimi bodo vaši makri delovali težje in pametneje.

Pogosti primeri urejanja makrov

Pospešite makre

Če imate makro, ki traja dlje časa, se lahko pojavi nekaj razlogov, zakaj se izvaja počasi.

Prvič: ko se zažene makro, bo Excel v realnem času prikazal vse, kar se dogaja - čeprav lahko poglej hitro zate, pravzapravprikazovanje delo je pomemben uspešnik. Eden od načinov za hitrejši zagon Excela je, da mu to povete prenehajte posodabljati zaslon:

'Onemogoči aplikacijo za posodabljanje zaslona.ScreenUpdating = False' Omogoči aplikacijo za posodabljanje zaslona. ScreenUpdating = True

Vrstica »Application.ScreenUpdating = False« pomeni, da makra ne boste videli, ampak bo deloval veliko hitreje. Upoštevajte, da morate na koncu makra vedno nastaviti ScreenUpdating na True, sicer Excel morda ne bo deloval tako, kot ste pričakovali kasneje!

Drug način za pospešitev makrov:izklopite samodejni izračun v makru. Če ste delali s kompleksnimi preglednicami, boste vedeli, da lahko majhne spremembe sprožijo na tisoče izračunov, ki potrebujejo čas za dokončanje, zato mnogi ljudje v Excelovih možnostih izklopijo samodejni izračun. To lahko preklopite tudi s kodo VBA, tako da bo vaš makro še vedno hitro deloval na drugih računalnikih. To pomaga v primerih, ko kopirate in prilepite veliko celic s formulo ali sprožite veliko izračunov, ko podatke prilepite v obseg:

"Onemogoči aplikacijo za samodejni izračun. Izračun = xlCalculationManual" Omogoči aplikacijo za samodejni izračun. Izračun = xlZračun Samodejno

Dodaj zanke in logiko (če stavki)

Makro snemalnik shrani vsa vaša dejanja kot kodo v jeziku, imenovanem VBA. VBA je več kot le način beleženja dejanj v Excelu - to je programski jezik, kar pomeni, da lahko vsebuje kodo za odločanje o tem, katera dejanja je treba izvesti, ali ponoviti dejanja, dokler ni izpolnjen pogoj.

Zanka

Recimo, da želite narediti makro, ki bo pripravil poročilo, in kot del tega makra ste morali delovnemu zvezku dodati devetnajst listov, skupaj dvajset. Lahko se posnamete, kako vedno znova kliknete gumb (+), ali pa napišete zanko, ki za vas ponovi dejanje, na primer:

PodporočiloPrep () Dim i As Long For i = 1 To 19. Sheets.Add Next i End Sub

V tem primeru uporabljamo a Za zanko, ki je nekakšna zanka, ki se ponavlja skozi vrsto postavk. Tukaj je naš obseg številke od 1 do 19 z uporabo spremenljivke z imenom 'i', tako da lahko zanka sledi. Znotraj naše zanke se med za inNaslednji vrstice (dodajanje lista), vendar lahko v zanko dodate toliko kode, kot želite oblikovati list, ali kopirati in prilepiti podatke na vsak list - kar koli želite ponoviti.

Če Izjave

An Če izjava se uporablja za odločitev, ali se neka koda izvaja ali ne, z uporabo logičnega testa za odločitev. Tu je preprost primer:

Sub ClearIfSmall () If Selection.Value <100 Nato Selection.Clear End If End Sub

Ta preprost primer prikazuje, kako deluje stavek If - preizkusite pogoj, ki je pravilen ali napačen (ali je vrednost izbrane celice manjša od 100?), in če test vrne True, se zažene notranja koda.

Pomanjkljivost te kode je, da preizkuša samo eno celico naenkrat (in ne bi uspela, če izberete več celic). To bi bilo bolj koristno, če bi lahko … prelistali vsako izbrano celico in preizkusili vsako …

Sub ClearIfSmall () Dim c As Range for each c In Selection.Cells If c.Value <100 Potem c.Clear End If Next c End Sub

V tem primeru obstaja nekoliko drugačna zanka For - ta se ne vrti skozi niz številk, ampak se pregiba skozi vse celice v izboru, pri čemer za spremenljivko uporablja spremenljivko z imenom 'c'. V zanki se vrednost 'c' uporabi za določitev, ali je treba celico počistiti ali ne.

Zanke in stavke If lahko kombinirate na kakršen koli način - zanke lahko postavite znotraj zank ali enega If v drugo ali uporabite If, ​​da se odločite, ali naj se zanka sploh izvaja.

<<>>

Odstranite učinke drsenja

Pogost razlog za urejanje kode makra je odstranitev drsenja po zaslonu. Pri snemanju makra boste morda morali z drsenjem doseči druga področja delovnega lista, vendar se za dostop do podatkov makrov ni treba pomikati.

Drsanje lahko vašo kodo natrpa s stotinami ali celo tisoč vrsticami nepotrebne kode. Tu je primer kode, ki se zabeleži, ko kliknete in povlečete na drsni trak:

Ta vrsta kode je popolnoma nepotrebna in jo je mogoče izbrisati, ne da bi to vplivalo na katero koli drugo funkcionalnost. Tudi če bi želeli ohraniti pomikanje, bi lahko to kodo še vedno zgostili v zanko.

Odstranite odvečno kodo

Posneti makri običajno dodajo veliko odvečne kode, ki ne odraža nujno, kaj želite, da makro naredi. Vzemite na primer naslednjo posneto kodo, ki beleži spreminjanje imena pisave v celici:

Čeprav je bilo spremenjeno samo ime pisave, je bilo zabeleženih enajst (11) sprememb pisave, kot so velikost pisave, učinki besedila itd. Če bi bil namen makra le spremeniti ime pisave (pri čemer vse druge lastnosti pustite pri miru), to posneti makro ne bi deloval!

Ta makro je mogoče spremeniti tako, da spremeni le ime pisave:

Ta makro ne bo le deloval po načrtih, ampak ga je tudi veliko lažje brati.

Odstranite premike kurzorja

Druga stvar, ki se zabeleži v makrih, so izbira delovnega lista in celic. To je težava, ker lahko uporabnik z lahkoto izgubi sled, kaj je pravkar delal, če se kazalec po zagonu makra premakne na drugo mesto.

Tako kot pri drsenju, ti boste morda morali premakniti kazalec in izbrati različne celice za izvajanje naloge, vendar makrom ni treba uporabljati kurzorja za dostop do podatkov. Upoštevajte naslednjo kodo, ki kopira obseg in ga nato prilepi na tri druge liste:

S to kodo je nekaj težav:

  • Uporabnik bo izgubil prejšnje mesto v delovnem zvezku
  • Makro ne določa, kateri list kopiramood - to bi lahko bila težava, če bi makro zagnali na napačnem listu

Poleg tega je koda težko berljiva in potratna. Te težave je mogoče enostavno rešiti:

V tej kodi je jasno razvidno, da kopiramo iz Sheet1, da se ne prilepijo niti aktivni delovni list niti izbrani obseg, da bi prilepili podatke. (Ena pomembna sprememba je uporaba "PasteSpecial" namesto "Paste" - Objekti obsega, na primer "Obseg (" C4 ″) ", imajo dostop samo do ukaza PasteSpecial.)

Kadar koli je koda polna sklicev na ».Select« in »Selection«, je namig, da obstaja prostor za optimizacijo te kode in njeno večjo učinkovitost.

wave wave wave wave wave