Kad ir kaip būtų šaunu žiūrėti, kaip jūsų VBA makrokomanda manipuliuoja ekranu, galite padėti savo makrokomandai veikti greičiau, jei išjungiate (išjungiate) „ScreenUpdating“.
Išjungti „ScreenUpdating“
1. Norėdami išjungti „ScreenUpdating“, kodo pradžioje įdėkite šią eilutę:
1 | Application.ScreenUpdating = Netiesa |
Įgalinti „ScreenUpdating“
2. Norėdami iš naujo įjungti „ScreenUpdating“, kodo pabaigoje įrašykite šią eilutę:
1 | Application.ScreenUpdating = Tiesa |
VBA ekrano atnaujinimo pavyzdys
Tada jūsų procedūra atrodys taip:
1234567891011 | Sub ScreenUpdating_Example ()Application.ScreenUpdating = Netiesa'Daryk ką norsDiapazonas („a1“). Kopijuoti diapazoną („b1“)Diapazonas („a2“). Kopijuoti diapazoną („b2“)Diapazonas ("a3"). Kopijuoti diapazonas ("b3")Application.ScreenUpdating = TiesaPabaiga Sub |
Ekrano atnaujinimo atnaujinimas
Išjungus „ScreenUpdating“ jūsų VBA kodas bus paleistas DAUG greičiau, tačiau jūsų darbas atrodys profesionaliau. Galutiniai vartotojai paprastai nenori matyti jūsų procedūrų veiksmų užkulisiuose (ypač kai procedūra vyksta lėtai). Be to, galbūt nenorite, kad galutiniai vartotojai matytų užkulisių funkcijas (pvz., Paslėptus darbalapius). Rekomenduoju išjungti (ir iš naujo įjungti) „ScreenUpdating“ praktiškai visose jūsų procedūrose.
Tačiau kartais reikia, kad ekranas būtų atnaujintas. Norėdami atnaujinti ekraną, turėsite laikinai vėl įjungti „ScreenUpdating“ (nėra ekrano „atnaujinimo“ komandos):
123 | Application.ScreenUpdating = Tiesa'Daryk ką norsApplication.ScreenUpdating = Netiesa |
VBA nustatymai - pagreitinimo kodas
Norėdami pagerinti kodo greitį, galite žaisti su keletu kitų nustatymų.
Išjungus automatinius skaičiavimus, greitis gali labai skirtis:
1 | Application.Calculation = xlManual |
Išjungus būsenos juostą taip pat bus nedidelis skirtumas:
1 | Application.DisplayStatusBar = Netiesa |
Jei jūsų darbaknygėje yra įvykių, paprastai turite išjungti įvykius procedūros pradžioje:
1 | Application.EnableEvents = Netiesa |
Galiausiai jūsų VBA kodas gali būti sulėtintas, kai „Excel“ bando iš naujo apskaičiuoti puslapio pertraukas (Pastaba: tai neturės įtakos visoms procedūroms). Norėdami išjungti puslapių pertraukų rodymą, naudokite šią kodo eilutę:
1 | ActiveSheet.DisplayPageBreaks = Netiesa |