Kui teie Exceli makrod muutuvad üha tugevamaks ja keerukamaks, võite avastada, et nende jõudlus väheneb. Makrode üle arutledes on sõna jõudlus tavaliselt kiiruse sünonüümiks . Kiirus on see, kui kiiresti teie VBA protseduurid ettenähtud ülesanded täidavad. Järgmised on kümme viisi, kuidas hoida oma Exceli makrosid optimaalsel jõudluse tasemel.
Lehtarvutuste peatamine
Kas teadsite, et iga kord, kui lahtrit, mis mõjutab teie arvutustabeli valemit, muudetakse või manipuleeritakse, arvutab Excel kogu töölehe ümber? Töölehtedel, millel on palju valemeid, võib see käitumine teie makrosid drastiliselt aeglustada.
Saate kasutada atribuuti Application.Calculation, et käskida Excelil lülituda käsitsi arvutamise režiimi. Kui töövihik on käsitsi arvutamise režiimis, ei arvuta töövihikut uuesti enne, kui käivitate arvutuse, vajutades klahvi F9.
Asetage Excel käsitsi arvutamise režiimi, käivitage kood ja lülitage seejärel tagasi automaatsele arvutusrežiimile.
Alammakro1()
Application.Calculation = xlCalculationManual
'Paigutage oma makrokood siia
Application.Calculation = xlCalculationAutomatic
Lõpeta alam
Kui seadistate arvutusrežiimi tagasi olekusse xlCalculationAutomatic, käivitatakse automaatselt töölehe ümberarvutamine, nii et pärast makro käivitamist pole vaja klahvi F9 vajutada.
Leheekraani värskendamise keelamine
Võite märgata, et makrode käitamisel ekraan vilgub üsna palju. See vilkumine tähendab, et Excel üritab ekraani ümber joonistada, et näidata töölehe hetkeseisu. Kahjuks võtab Excel iga kord, kui ekraani ümber joonistab, mäluressursse.
Saate kasutada atribuuti Application.ScreenUpdating, et keelata ekraanivärskendused, kuni makro on lõpetatud. Ekraani värskendamise keelamine säästab aega ja ressursse, võimaldades teie makrol veidi kiiremini töötada. Kui teie makrokood on töötamise lõpetanud, saate ekraani värskendamise uuesti sisse lülitada.
Alammakro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = Vale
'Paigutage oma makrokood siia
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = Tõene
Lõpeta alam
Kui olete atribuudi ScreenUpdating väärtusele True tagasi seadnud, käivitab Excel automaatselt ekraani uuesti joonistamise.
Olekuriba värskenduste väljalülitamine
Exceli akna allservas kuvatav Exceli olekuriba kuvab tavaliselt teatud toimingute edenemist Excelis. Kui teie makro töötab suure hulga andmetega, võtab olekuriba osa ressurssidest.
Oluline on märkida, et ekraani värskendamise väljalülitamine on olekuriba kuva väljalülitamisest erinev. Olekuriba värskendamine jätkub ka siis, kui keelate ekraani värskendamise. Saate kasutada atribuuti Application.DisplayStatusBar mis tahes olekuriba värskenduste ajutiseks keelamiseks, parandades veelgi oma makro jõudlust.
Alammakro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = Vale
Application.DisplayStatusBar = Vale
'Paigutage oma makrokood siia
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = Tõene
Application.DisplayStatusBar = Tõene
Lõpeta alam
Käske Excelil sündmusi ignoreerida
Saate rakendada makrosid sündmuste protseduuridena, käsitades Excelil käivitada teatud koodi, kui tööleht või töövihik muutub.
Mõnikord teevad standardsed makrod muudatusi, mis käivitavad sündmuse protseduuri. Näiteks kui teil on standardmakro, mis manipuleerib mitut lahtrit lehel Sheet1, siis iga kord, kui sellel lehel mõnda lahtrit muudetakse, peab teie makro sündmuse Worksheet_Change käitamise ajaks peatama.
Saate lisada veel ühe jõudluse suurendamise taseme, kasutades atribuuti EnableEvents, et käskida Excelil makro käitamise ajal sündmusi ignoreerida.
Enne makro käivitamist määrake atribuudi EnableEvents väärtuseks False. Kui teie makrokood on töötamise lõpetanud, saate atribuudi EnableEvents väärtuseks uuesti määrata True.
Alammakro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = Vale
Application.DisplayStatusBar = Vale
Application.EnableEvents = Vale
'Paigutage oma makrokood siia
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = Tõene
Application.DisplayStatusBar = Tõene
Application.EnableEvents = Tõene
Lõpeta alam
Lehekülgede peitmine
Iga kord, kui teie makro muudab ridade arvu, veergude arvu või muudab töölehe lehekülje seadistust, on Excel sunnitud võtma aega, et arvutada lehel kuvatud leheküljevahed.
Seda käitumist saate vältida, kui peidate enne makro käivitamist lehepaused.
Lehepiiride peitmiseks määrake lehe atribuudi DisplayPageBreaks väärtuseks False. Kui soovite pärast makro käitamist jätkata lehevahede kuvamist, määrake lehe atribuudi DisplayPageBreaks väärtuseks tagasi Tõene.
Alammakro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = Vale
Application.DisplayStatusBar = Vale
Application.EnableEvents = Vale
Activesheet.DisplayPageBreaks = Vale
'Paigutage oma makrokood siia
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = Tõene
Application.DisplayStatusBar = Tõene
Application.EnableEvents = Tõene
Activesheet.DisplayPageBreaks = Tõene
Lõpeta alam
Pivot-tabeli värskenduste peatamine
Kui teie makro manipuleerib pivot-tabeleid, mis sisaldavad suuri andmeallikaid, võite toimida halvasti, kui teete toiminguid, näiteks dünaamilist liigendväljade lisamist või teisaldamist.
Saate parandada oma makro jõudlust, peatades liigendtabeli ümberarvutamise seni, kuni kõik pöördevälja muudatused on tehtud. Ümberarvutamise edasilükkamiseks määrake lihtsalt atribuudi PivotTable.ManualUpdate väärtuseks Tõene, käivitage oma makrokood ja seejärel määrake ümberarvutamise käivitamiseks atribuudi PivotTable.ManualUpdate väärtuseks False.
Alammakro1()
ActiveSheet.PivotTables("PivotTable1").ManualUpdate=True
'Paigutage oma makrokood siia
ActiveSheet.PivotTables("PivotTable1").ManualUpdate=False
Lõpeta alam
Vältige kopeerimist ja kleepimist
Oluline on meeles pidada, et kuigi Macro Recorder säästab teie eest VBA-koodi kirjutamisega aega, ei kirjuta see alati kõige tõhusamat koodi. Hea näide on see, kuidas Macro Recorder jäädvustab kõik kopeerimis- ja kleepimistoimingud, mida te salvestamise ajal teete.
Saate anda oma makrodele väikese tõuke, lõigates välja vahendaja ja kopeerides otse ühest lahtrist sihtlahtrisse. See alternatiivne kood kasutab lõikepuhvrist möödahiilimiseks ja lahtri A1 sisu otse lahtrisse B1 kopeerimiseks argumendi Destination.
Vahemik("A1").Kopeeri sihtkoht:=Range("B1")
Kui teil on vaja kopeerida ainult väärtusi (mitte vormindamist ega valemeid), saate jõudlust veelgi parandada, vältides kopeerimismeetodit. Lihtsalt määrake sihtlahtri väärtuseks sama väärtus, mis leiti lähtelahtris. See meetod on umbes 25 korda kiirem kui kopeerimismeetodi kasutamine:
Vahemik("B1").Väärtus = Vahemik("A1").Väärtus
Kui teil on vaja ühest lahtrist teise kopeerida ainult valemeid (mitte väärtusi ega vormindamist), saate sihtlahtri valemi määrata samale valemile, mis sisaldub lähtelahtris:
Vahemik("B1").Valem = Vahemik("A1").Valem
Kasutades lauset With
Makrode salvestamisel manipuleerite sageli sama objektiga rohkem kui üks kord. Saate säästa aega ja parandada jõudlust, kui kasutate käsku With, et sooritada antud objektil ühe pildiga mitu toimingut.
Järgmises näites kasutatav avaldus käseb Excelil rakendada kõiki vormingumuudatusi korraga:
Vahemikuga("A1").Font
.Bold = tõsi
.Italic = Tõsi
.Underline = xlUnderlineStyleSingle
Lõpeta
Kui hakkate harjumuseks tükeldada tegevusi With-lausetesse, ei muuda teie makrod mitte ainult kiiremini töös, vaid hõlbustab ka makrokoodi lugemist.
Valiku meetodi vältimine
Makrosalvestile meeldib kasutada valikumeetodit, et objekte enne nendega toimingute tegemist selgesõnaliselt valida. Üldiselt pole objekte enne nendega töötamist vaja valida. Tegelikult saate makro jõudlust märkimisväärselt parandada, kui ei kasuta Select-meetodit.
Pärast makrode salvestamist muutke loodud koodi valimise meetodite eemaldamiseks harjumuseks. Sel juhul näeks optimeeritud kood välja järgmine:
Sheets("Leht1"). Vahemik("A1"). ValemR1C1 = "1000"
Sheets("Leht2"). Vahemik("A1"). ValemR1C1 = "1000"
Sheets("Sheet3"). Vahemik("A1"). ValemR1C1 = "1000"
Pange tähele, et mitte midagi valitakse. Kood kasutab vajalike toimingute rakendamiseks lihtsalt objekti hierarhiat.
Reiside piiramine töölehele
Teine viis makrode kiirendamiseks on piirata koodis töölehe andmetele viitamise kordade arvu. Töölehelt andmete hankimine on alati vähem tõhus kui mälust. See tähendab, et teie makrod töötavad palju kiiremini, kui nad ei pea töölehega korduvalt suhtlema.
Näiteks sunnib järgmine lihtne kood VBA-d pidevalt naasma rakendusse Sheets (“Sheet1”).Range (“A1”), et saada If-lauses tehtava võrdluse jaoks vajalik arv:
Aruandekuu jaoks = 1 kuni 12
Kui Vahemik("A1").Väärtus = AruandeKuu Siis
MsgBox 1000000 / Aruannekuu
Lõpeta Kui
Järgmine aruannekuu
Palju tõhusam meetod on salvestada väärtus Sheets(“Sheet1”).Range(“A1”) muutujasse nimega MyMonth. Sel viisil viitab kood töölehe asemel muutujale MyMonth:
Dim MyMonth täisarvuna
Minukuu = Vahemik("A1").Väärtus
Aruandekuu jaoks = 1 kuni 12
Kui Minukuu = Aruandekuu Siis
MsgBox 1000000 / Aruannekuu
Lõpeta Kui
Järgmine aruannekuu
Kaaluge muutujate võimendamist mälus olevate andmetega töötamiseks, mitte töölehtede otsesele viitamisele.