VBA for Excel 2016 on kiire, kuid see pole alati piisavalt kiire. (Arvutiprogrammid pole kunagi piisavalt kiired.) Jätkake lugemist, et leida mõned programmeerimisnäited, mida saate makrode kiirendamiseks kasutada.
Ekraani värskendamise väljalülitamine
Makro käivitamisel saate rahulikult istuda ja vaadata kõiki makros toimuvaid ekraanitoiminguid. Kuigi see võib olla õpetlik, on see pärast makro korralikult tööle hakkamist sageli tüütu ja võib teie makro jõudlust märkimisväärselt aeglustada. Õnneks saate keelata ekraani värskendamise, mis tavaliselt makro käivitamisel toimub. Ekraani värskendamise väljalülitamiseks kasutage järgmist avaldust.
Application.ScreenUpdating = Vale
Kui soovite, et kasutaja näeks makro mis tahes hetkel toimuvat, kasutage ekraani värskendamise uuesti sisselülitamiseks järgmist avaldust.
Application.ScreenUpdating = Tõene
Kiiruse erinevuse demonstreerimiseks käivitage see lihtne makro, mis täidab vahemiku numbritega:
Sub FillRange()
Dim r as Long, c As Long
Dim number sama pikk
Arv = 0
Kui r = 1 kuni 50
Kui c = 1 kuni 50
Arv = arv + 1
Lahtrid(r, c).Valige
Lahtrid(r, c).Väärtus = arv
Järgmine c
Järgmine r
Lõpeta alam
Näete, et iga lahter valitakse ja lahtritesse sisestatakse väärtus. Nüüd sisestage protseduuri alguses järgmine lause ja käivitage see uuesti:
Application.ScreenUpdating = Vale
Vahemik täitub palju kiiremini ja te ei näe tulemust enne, kui makro on töötamise lõpetanud ja ekraani värskendamine on (automaatselt) seatud väärtusele Tõene.
Koodi silumisel lõpeb programmi täitmine mõnikord kuskil keskel, ilma et oleksite ekraanivärskendust uuesti sisse lülitanud. See põhjustab mõnikord Exceli rakenduse akna täieliku reageerimise. Väljapääs sellest külmutatud olekust on lihtne: minge tagasi VBE-sse ja käivitage kohe aknas järgmine lause:
Application.ScreenUpdating = Tõene
Automaatse arvutamise väljalülitamine
Kui teil on paljude keeruliste valemitega tööleht, võite avastada, et saate asju märkimisväärselt kiirendada, kui määrate makro täitmise ajal arvutusrežiimi käsitsi. Kui makro on lõppenud, seadke arvutusrežiim tagasi automaatseks.
Järgmine väide seab Exceli arvutusrežiimi käsitsi.
Application.Calculation = xlCalculationManual
Arvutusrežiimi automaatseks seadmiseks käivitage järgmine lause:
Application.Calculation = xlCalculationAutomatic
Kui teie kood kasutab valemitulemustega lahtreid, tähendab arvutamise väljalülitamine, et lahtreid ei arvutata ümber, välja arvatud juhul, kui te Excelil seda selgesõnaliselt käsite!
Nende tüütute hoiatusteadete kõrvaldamine
Nagu teate, saab makro automaatselt sooritada mitmeid toiminguid. Paljudel juhtudel saate makro käivitada ja seejärel puhkeruumis aega veeta, kuni Excel oma asja teeb. Mõned Exceli toimingud kuvavad aga sõnumeid, mis nõuavad inimese reageerimist. Seda tüüpi sõnumid tähendavad, et te ei saa jätta Excelit makro täitmise ajal järelevalveta – välja arvatud juhul, kui teate salajast nippi.

Saate anda Excelile käsu mitte kuvada makro käitamise ajal seda tüüpi hoiatusi.
Salajane trikk nende hoiatusteadete vältimiseks on järgmise VBA-lause sisestamine oma makrosse:
Application.DisplayAlerts = Vale
Excel teostab seda tüüpi sõnumite jaoks vaiketoimingu. Lehe kustutamise puhul on vaiketehinguks Delete. Kui te pole kindel, mis on vaiketoiming, tehke test, et näha, mis juhtub.
Kui protseduur lõppeb, lähtestab Excel atribuudi DisplayAlerts automaatselt väärtusele Tõene. Kui teil on vaja hoiatused enne protseduuri lõppu uuesti sisse lülitada, kasutage järgmist avaldust.
Application.DisplayAlerts = Tõene
Objektiviidete lihtsustamine
Nagu te ilmselt juba teate, võivad viited objektidele muutuda väga pikaks. Näiteks võib täielikult määratletud viide vahemiku objektile välja näha järgmine:
Töövihikud (“Minuraamat.xlsx”). Töölehed (“Leht1”) _
Vahemik ("Intressimäär")
Kui teie makro kasutab seda vahemikku sageli, võiksite luua objektimuutuja, kasutades käsku Set. Näiteks määrab järgmine lause selle Range objekti objekti muutujale nimega Rate:
Määra määr = töövihikud ("MyBook.xlsx") _
.Töölehed(“Leht1”). Vahemik(“Intressimäär”)
Pärast selle objektimuutuja määratlemist saate pikema viite asemel kasutada muutujat Rate. Näiteks saate muuta lahtri nimega InterestRate väärtust:
Rate.Value = 0,085
Seda on palju lihtsam sisestada kui järgmist väidet:
Töövihikud (“Minuraamat.xlsx”). Töölehed (“Leht1”). _
Vahemik ("Intressimäär") = 0,085
Lisaks kodeerimise lihtsustamisele kiirendab objektimuutujate kasutamine teie makrosid märkimisväärselt.
Muutujate tüüpide deklareerimine
Tavaliselt ei pea te muretsema muutujale määratud andmete tüübi pärast. Excel tegeleb teie eest kulisside taga kõigi üksikasjadega. Näiteks kui teil on muutuja nimega MyVar, saate sellele muutujale määrata mis tahes tüüpi numbri. Saate sellele protseduuri hiljem isegi tekstistringi määrata.
Kui soovite, et teie protseduurid käivituksid võimalikult kiiresti, öelge Excelile, mis tüüpi andmed igale muutujale määratakse. Seda nimetatakse muutuja tüübi deklareerimiseks .
Üldiselt peaksite kasutama andmetüüpi, mis nõuab väikseimat arvu baite, kuid suudab siiski käsitleda kõiki talle määratud andmeid. Kui VBA töötab andmetega, sõltub täitmiskiirus VBA käsutuses olevate baitide arvust. Teisisõnu, mida vähem baite andmeid kasutab, seda kiiremini saab VBA andmetele juurde pääseda ja nendega manipuleerida. Erandiks on andmetüüp Integer. Kui kiirus on kriitiline, kasutage selle asemel pikka andmetüüpi.
Kui kasutate objektimuutujat, saate muutuja deklareerida konkreetse objektitüübina. Siin on näide:
Dim Rate as Range
Määra määr = töövihikud ("MyBook.xlsx") _
.Töölehed(“Leht1”). Vahemik(“Intressimäär”)
Struktuuri With-End With kasutamine
Kas peate määrama objektile mitu atribuuti? Teie kood töötab kiiremini, kui kasutate struktuuri With-End With. Täiendav eelis on see, et teie koodi võib olla lihtsam lugeda.
Järgmine kood ei kasuta funktsiooni With-End With:
Selection.Horizontal Alignment = xlCenter
Selection.VerticalAlignment = xlCenter
Selection.WrapText = Tõene
Valik. Orientatsioon = 0
Selection.ShrinkToFit = Vale
Selection.MergeCells = Vale
Siin on sama kood, mis on ümber kirjutatud, et kasutada funktsiooni With-End With:
Valikuga
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = Tõene
.Orientatsioon = 0
.ShrinkToFit = Vale
.MergeCells = Vale
Lõpeta
Kui kasutate With-End With kasutamist, veenduge, et iga lause algaks punktiga.