VBA, skirta „Excel 2016“, yra greita, bet ne visada pakankamai greita. (Kompiuterinės programos niekada nėra pakankamai greitos.) Skaitykite toliau, kad sužinotumėte keletą programavimo pavyzdžių, kuriuos galite naudoti norėdami pagreitinti makrokomandas.
Ekrano atnaujinimo išjungimas
Vykdydami makrokomandą galite ramiai sėdėti ir stebėti visus makrokomandos veiksmus ekrane. Nors tai padaryti gali būti pamokoma, tinkamai pradėjus veikti makrokomandai, tai dažnai erzina ir gali labai sulėtinti makrokomandos veikimą. Laimei, galite išjungti ekrano naujinimą, kuris paprastai vyksta vykdant makrokomandą. Norėdami išjungti ekrano naujinimą, naudokite šį teiginį:
Application.ScreenUpdating = Netiesa
Jei norite, kad vartotojas matytų, kas vyksta bet kuriuo makrokomandos momentu, naudokite šį teiginį, kad vėl įjungtumėte ekrano naujinimą:
Application.ScreenUpdating = Tiesa
Norėdami parodyti greičio skirtumą, vykdykite šią paprastą makrokomandą, kuri užpildo diapazoną skaičiais:
Sub FillRange()
Dim r as Long, c As Long
Pritemdykite numerį kaip ilgą
Skaičius = 0
Jei r = 1 iki 50
Kai c = 1 iki 50
Skaičius = skaičius + 1
Langeliai (r, c). Pasirinkite
Langeliai (r, c). Reikšmė = skaičius
Kitas c
Kitas r
Pabaigos sub
Matote, kad kiekvienas langelis pasirenkamas ir į langelius įvedama reikšmė. Dabar procedūros pradžioje įterpkite šį teiginį ir paleiskite jį dar kartą:
Application.ScreenUpdating = Netiesa
Diapazonas užpildomas daug greičiau, o rezultato nematysite tol, kol makrokomandos vykdymas nebaigtas ir ekrano naujinimas (automatiškai) nenustatytas į True.
Kai derinate kodą, programos vykdymas kartais baigiasi kažkur per vidurį jums neįjungus ekrano atnaujinimo. Dėl to kartais „Excel“ programos langas visiškai nereaguoja. Išeitis iš šios užšaldytos būsenos paprasta: grįžkite į VBE ir tiesioginiame lange vykdykite šį teiginį:
Application.ScreenUpdating = Tiesa
Automatinio skaičiavimo išjungimas
Jei turite darbalapį su daugybe sudėtingų formulių, galite pastebėti, kad galite žymiai paspartinti darbą, nustatydami skaičiavimo režimą rankiniu būdu, kol vykdoma makrokomanda. Baigę makrokomandą, nustatykite skaičiavimo režimą atgal į automatinį.
Šis teiginys nustato „Excel“ skaičiavimo režimą į rankinį:
Application.Calculation = xlCalculationManual
Vykdykite kitą sakinį, kad nustatytumėte automatinį skaičiavimo režimą:
Taikymas.Skaičiavimas = xlCalculationAutomatic
Jei kode naudojami langeliai su formulės rezultatais, skaičiavimo išjungimas reiškia, kad langeliai nebus perskaičiuojami, nebent aiškiai nurodysite tai padaryti programai Excel!
Pašalinkite tuos įkyrius įspėjimo pranešimus
Kaip žinote, makrokomanda gali automatiškai atlikti keletą veiksmų. Daugeliu atvejų galite pradėti kurti makrokomandą ir eiti į poilsio kambarį, kol programa „Excel“ atlieka savo darbą. Tačiau kai kurios „Excel“ operacijos rodo pranešimus, kuriems reikia žmogaus atsako. Šio tipo pranešimai reiškia, kad negalite palikti „Excel“ be priežiūros, kol ji vykdo jūsų makrokomandą, nebent žinote slaptą triuką.
Galite nurodyti Excel nerodyti šių tipų įspėjimų vykdant makrokomandą.
Slaptas triukas, kaip išvengti šių įspėjimų pranešimų, yra įterpti šį VBA teiginį į makrokomandą:
Application.DisplayAlerts = Netiesa
„Excel“ vykdo numatytąją šių tipų pranešimų operaciją. Jei ištrinate lapą, numatytoji operacija yra Naikinti. Jei nesate tikri, kokia yra numatytoji operacija, atlikite testą, kad pamatytumėte, kas atsitiks.
Kai procedūra baigiasi, „Excel“ automatiškai iš naujo nustato „DisplayAlerts“ ypatybę į „True“. Jei prieš pasibaigiant procedūrai reikia vėl įjungti įspėjimus, naudokite šį teiginį:
Application.DisplayAlerts = Tiesa
Objektų nuorodų supaprastinimas
Kaip tikriausiai jau žinote, nuorodos į objektus gali tapti labai ilgos. Pavyzdžiui, visa nuoroda į diapazono objektą gali atrodyti taip:
Darbaknygės („Mano knyga.xlsx“). Darbo lapai („Sheet1“) _
.diapazonas („palūkanų norma“)
Jei jūsų makrokomandoje šis diapazonas dažnai naudojamas, galbūt norėsite sukurti objekto kintamąjį naudodami komandą Set. Pavyzdžiui, šis teiginys priskiria šį diapazono objektą objekto kintamajam pavadinimu Greitis:
Nustatyti rodiklį = darbaknygės („MyBook.xlsx“) _
.Darbo lapeliai („Sheet1“). Diapazonas („Palūkanų norma“)
Apibrėžę šį objekto kintamąjį, galite naudoti kintamąjį Greitis, o ne ilgą nuorodą. Pavyzdžiui, galite pakeisti langelio, pavadinto InterestRate, reikšmę:
Įvertinimas.Vertė = 0,085
Tai daug lengviau įvesti nei šį teiginį:
Darbaknygės („Mano knyga.xlsx“). Darbo lapai („Sheet1“). _
Diapazonas („palūkanų norma“) = 0,085
Objekto kintamieji ne tik supaprastina kodavimą, bet ir žymiai pagreitina makrokomandas.
Kintamųjų tipų deklaravimas
Paprastai jums nereikia jaudintis dėl duomenų, kuriuos priskiriate kintamajam, tipo. „Excel“ užkulisiuose tvarko visas detales. Pavyzdžiui, jei turite kintamąjį pavadinimu MyVar, tam kintamajam galite priskirti bet kokio tipo numerį. Jūs netgi galite priskirti jai teksto eilutę vėliau procedūros metu.
Jei norite, kad procedūros būtų vykdomos kuo greičiau, nurodykite „Excel“, kokio tipo duomenys bus priskirti kiekvienam jūsų kintamajam. Tai žinoma kaip kintamojo tipo deklaravimas .
Apskritai turėtumėte naudoti duomenų tipą, kuriam reikia mažiausio baitų skaičiaus, tačiau vis tiek galite apdoroti visus jam priskirtus duomenis. Kai VBA dirba su duomenimis, vykdymo greitis priklauso nuo VBA turimų baitų skaičiaus. Kitaip tariant, kuo mažiau duomenų naudoja baitų, tuo greičiau VBA gali pasiekti duomenis ir jais manipuliuoti. Išimtis yra sveikųjų skaičių duomenų tipas. Jei greitis yra labai svarbus, naudokite ilgų duomenų tipą.
Jei naudojate objekto kintamąjį, galite deklaruoti kintamąjį kaip konkretų objekto tipą. Štai pavyzdys:
Pritemdymo rodiklis kaip diapazonas
Nustatyti rodiklį = darbaknygės („MyBook.xlsx“) _
.Darbo lapeliai („Sheet1“). Diapazonas („Palūkanų norma“)
Naudojant struktūrą With-End With
Ar reikia nustatyti daugybę objekto savybių? Jūsų kodas veikia greičiau, jei naudojate struktūrą With-End With. Papildomas pranašumas yra tai, kad jūsų kodą gali būti lengviau perskaityti.
Toliau pateiktame kode nenaudojama su pabaiga:
Selection.Horizontal Alignment = xlCenter
Selection.VerticalAlignment = xlCenter
Selection.WrapText = Tiesa
Pasirinkimas.Orientacija = 0
Selection.ShrinkToFit = Netiesa
Selection.MergeCells = Netiesa
Štai tas pats kodas, perrašytas, kad būtų naudojamas su pabaiga:
Su atranka
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = Tiesa
.Orientacija = 0
.ShrinkToFit = Netiesa
.MergeCells = Netiesa
Baigti su
Kai naudojate With-End With, įsitikinkite, kad kiekvienas teiginys prasideda tašku.