Ndërsa makrot tuaja Excel bëhen gjithnjë e më të fuqishme dhe komplekse, mund të zbuloni se ato humbasin performancën. Kur diskutoni makro, fjala performancë zakonisht është sinonim i shpejtësisë . Shpejtësia është se sa shpejt procedurat tuaja VBA kryejnë detyrat e synuara. Më poshtë janë dhjetë mënyra për të ndihmuar në funksionimin e makrove tuaja Excel në nivelin e tyre optimal të performancës.
Ndalimi i llogaritjeve të fletëve
A e dini se sa herë që ndryshon ose manipulohet një qelizë që ndikon në ndonjë formulë në tabelën tuaj të llogaritjes, Excel rillogarit të gjithë fletën e punës? Në fletët e punës që kanë një sasi të madhe formulash, kjo sjellje mund të ngadalësojë në mënyrë drastike makrot tuaja.
Mund të përdorni veçorinë Application.Calculation për t'i thënë Excel të kalojë në modalitetin e llogaritjes manuale. Kur një libër pune është në modalitetin e llogaritjes manuale, libri i punës nuk do të rillogaritet derisa të aktivizoni në mënyrë të qartë një llogaritje duke shtypur tastin F9.
Vendoseni Excel në modalitetin e llogaritjes manuale, ekzekutoni kodin tuaj dhe më pas kaloni në modalitetin automatik të llogaritjes.
Nën makro1()
Aplikimi.Llogaritja = xlManual i llogaritjes
'Vendosni kodin tuaj makro këtu
Aplikimi.Llogaritja = xlLlogaritjaAutomatike
Fundi Nën
Rivendosja e modalitetit të llogaritjes në xlCalculationAutomatic do të shkaktojë automatikisht një rillogaritje të fletës së punës, kështu që nuk ka nevojë të shtypni tastin F9 pas ekzekutimit të makro.
Çaktivizimi i përditësimit të ekranit të fletës
Mund të vëreni se kur makrot tuaja funksionojnë, ekrani juaj dridhet mjaft. Kjo dridhje është duke u përpjekur Excel të rivizatojë ekranin për të treguar gjendjen aktuale të fletës së punës. Fatkeqësisht, sa herë që Excel rivizaton ekranin, ai merr burimet e memories.
Mund të përdorni veçorinë Application.ScreenUpdating për të çaktivizuar përditësimet e ekranit derisa makroja juaj të ketë përfunduar. Çaktivizimi i përditësimit të ekranit kursen kohë dhe burime, duke lejuar që makroja juaj të funksionojë pak më shpejt. Pasi të ketë përfunduar ekzekutimi i kodit tuaj makro, mund ta aktivizoni sërish përditësimin e ekranit.
Nën makro1()
Aplikimi.Llogaritja = xlManual i llogaritjes
Application.ScreenUpdating = False
'Vendosni kodin tuaj makro këtu
Aplikimi.Llogaritja = xlLlogaritjaAutomatike
Application.ScreenUpdating = E vërtetë
Fundi Nën
Pasi të keni vendosur përsëri veçorinë ScreenUpdating në True, Excel do të aktivizojë automatikisht një rivizatim të ekranit.
Po çaktivizon përditësimet e shiritit të statusit
Shiriti i statusit të Excel, i cili shfaqet në fund të dritares së Excel, normalisht shfaq ecurinë e veprimeve të caktuara në Excel. Nëse makroja juaj po punon me shumë të dhëna, shiriti i statusit do të marrë disa burime.
Është e rëndësishme të theksohet se çaktivizimi i përditësimit të ekranit është i ndarë nga çaktivizimi i ekranit të shiritit të statusit. Shiriti i statusit do të vazhdojë të përditësohet edhe nëse çaktivizon përditësimin e ekranit. Ju mund të përdorni veçorinë Application.DisplayStatusBar për të çaktivizuar përkohësisht çdo përditësim të shiritit të statusit, duke përmirësuar më tej performancën e makros tuaj:
Nën makro1()
Aplikimi.Llogaritja = xlManual i llogaritjes
Application.ScreenUpdating = False
Aplikimi.DisplayStatusBar = False
'Vendosni kodin tuaj makro këtu
Aplikimi.Llogaritja = xlLlogaritjaAutomatike
Application.ScreenUpdating = E vërtetë
Aplikimi.DisplayStatusBar = E vërtetë
Fundi Nën
Duke i thënë Excel-it të injorojë ngjarjet
Ju mund të zbatoni makro si procedura ngjarjesh, duke i thënë Excel-it të ekzekutojë kode të caktuara kur ndryshon një fletë pune ose një libër pune.
Ndonjëherë, makro standarde bëjnë ndryshime që do të shkaktojnë një procedurë ngjarjeje. Për shembull, nëse keni një makro standarde që manipulon disa qeliza në Sheet1, sa herë që ndryshon një qelizë në atë fletë, makroja juaj duhet të ndalojë gjatë ekzekutimit të ngjarjes Worksheet_Change.
Mund të shtoni një nivel tjetër të rritjes së performancës duke përdorur veçorinë EnableEvents për t'i thënë Excel-it të injorojë ngjarjet ndërsa makroja juaj ekzekutohet.
Cakto veçorinë EnableEvents në False përpara se të ekzekutosh makro. Pasi të përfundojë ekzekutimi i kodit tuaj makro, mund ta vendosni përsëri veçorinë EnableEvents në True.
Nën makro1()
Aplikimi.Llogaritja = xlManual i llogaritjes
Application.ScreenUpdating = False
Aplikimi.DisplayStatusBar = False
Aplikimi.EnableEvents = False
'Vendosni kodin tuaj makro këtu
Aplikimi.Llogaritja = xlLlogaritjaAutomatike
Application.ScreenUpdating = E vërtetë
Aplikimi.DisplayStatusBar = E vërtetë
Aplikimi.EnableEvents = E vërtetë
Fundi Nën
Fshehja e prishjeve të faqeve
Sa herë që makro modifikon numrin e rreshtave, modifikon numrin e kolonave ose ndryshon konfigurimin e faqes së një flete pune, Excel detyrohet të marrë kohë për të rillogaritur ndarjet e faqeve të shfaqura në fletë.
Ju mund ta shmangni këtë sjellje thjesht duke fshehur thyerjet e faqes përpara se të filloni makro.
Cakto veçorinë e fletës DisplayPageBreaks në False për të fshehur ndërprerjet e faqeve. Nëse dëshironi të vazhdoni të shfaqni ndërprerjet e faqeve pas ekzekutimit të makros tuaj, rivendosni veçorinë e fletës DisplayPageBreaks në "E vërtetë".
Nën makro1()
Aplikimi.Llogaritja = xlManual i llogaritjes
Application.ScreenUpdating = False
Aplikimi.DisplayStatusBar = False
Aplikimi.EnableEvents = False
Fletë aktive.DisplayPageBreaks = False
'Vendosni kodin tuaj makro këtu
Aplikimi.Llogaritja = xlLlogaritjaAutomatike
Application.ScreenUpdating = E vërtetë
Aplikimi.DisplayStatusBar = E vërtetë
Aplikimi.EnableEvents = E vërtetë
Fletë aktive.DisplayPageBreaks = E vërtetë
Fundi Nën
Po pezullon përditësimet e tabelave kryesore
Nëse makroja juaj manipulon tabelat kryesore që përmbajnë burime të mëdha të dhënash, mund të keni performancë të dobët kur bëni gjëra të tilla si shtimi ose lëvizja dinamike e fushave kryesore.
Ju mund të përmirësoni performancën e makros tuaj duke pezulluar rillogaritjen e tabelës së boshtit derisa të bëhen të gjitha ndryshimet e fushës së rrotullimit. Thjesht vendosni veçorinë PivotTable.ManualUpdate në True për të shtyrë rillogaritjen, ekzekutoni kodin tuaj makro dhe më pas vendoseni veçorinë PivotTable.ManualUpdate përsëri në False për të aktivizuar rillogaritjen.
Nën makro1()
ActiveSheet.PivotTables("PivotTable1").ManualUpdate=E vërtetë
'Vendosni kodin tuaj makro këtu
ActiveSheet.PivotTables("PivotTable1").ManualUpdate=False
Fundi Nën
Largohuni nga kopjimi dhe ngjitja
Është e rëndësishme të mbani mend se megjithëse Macro Recorder kursen kohë duke shkruar kodin VBA për ju, ai nuk shkruan gjithmonë kodin më efikas. Një shembull kryesor është se si Macro Recorder kap çdo veprim të kopjimit dhe ngjitjes që kryeni gjatë regjistrimit.
Ju mund t'i jepni makrove tuaja një nxitje të lehtë duke hequr ndërmjetësin dhe duke kryer një kopje të drejtpërdrejtë nga një qelizë në një qelizë destinacioni. Ky kod alternativ përdor argumentin Destinacioni për të anashkaluar tabelën e fragmenteve dhe për të kopjuar përmbajtjen e qelizës A1 drejtpërdrejt në qelizën B1.
Gama ("A1"). Kopjo destinacionin:=Rapja ("B1")
Nëse keni nevojë të kopjoni vetëm vlera (jo formatim apo formula), mund ta përmirësoni performancën edhe më shumë duke shmangur metodën e kopjimit të gjithë së bashku. Thjesht vendosni vlerën e qelizës së destinacionit në të njëjtën vlerë që gjendet në qelizën burimore. Kjo metodë është afërsisht 25 herë më e shpejtë sesa përdorimi i metodës së Kopjimit:
Range("B1").Vlera = Range("A1").Vlera
Nëse keni nevojë të kopjoni vetëm formula nga një qelizë në tjetrën (jo vlera ose formatim), mund ta vendosni formulën e qelizës së destinacionit në të njëjtën formulë që gjendet në qelizën burimore:
Range("B1").Formula = Range("A1").Formula
Duke përdorur deklaratën With
Kur regjistroni makro, shpesh do të manipuloni të njëjtin objekt më shumë se një herë. Mund të kurseni kohë dhe të përmirësoni performancën duke përdorur deklaratën With për të kryer disa veprime në një objekt të caktuar në një pozë.
Deklarata With e përdorur në shembullin e mëposhtëm i thotë Excel që të zbatojë të gjitha ndryshimet e formatimit në të njëjtën kohë:
Me Range ("A1"). Font
.Bold = E vërtetë
.Italik = E vërtetë
.Nënvizoni = xlUnderlineStyleSingle
Fund Me
Marrja e zakonit të ndarjes së veprimeve në deklaratat With jo vetëm që do t'i mbajë makrot tuaja të funksionojnë më shpejt, por gjithashtu do ta bëjë më të lehtë leximin e kodit tuaj makro.
Shmangia e metodës Select
Macro Recorder pëlqen të përdorë metodën Select për të zgjedhur në mënyrë eksplicite objekte përpara se të ndërmarrë veprime mbi to. Në përgjithësi nuk ka nevojë të zgjidhni objekte përpara se të punoni me to. Në fakt, ju mund të përmirësoni në mënyrë dramatike performancën makro duke mos përdorur metodën Select.
Pas regjistrimit të makrove tuaja, bëjeni zakon të ndryshoni kodin e krijuar për të hequr metodat Zgjidh. Në këtë rast, kodi i optimizuar do të duket si më poshtë:
Fletë ("Fleta 1"). Gama ("A1").FormulaR1C1 = "1000"
Fletë ("Fleta 2"). Gama ("A1").FormulaR1C1 = "1000"
Fletët ("Fleta 3"). Gama ("A1").FormulaR1C1 = "1000"
Vini re se asgjë nuk është duke u zgjedhur. Kodi thjesht përdor hierarkinë e objektit për të zbatuar veprimet e nevojshme.
Kufizimi i udhëtimeve në fletën e punës
Një mënyrë tjetër për të shpejtuar makrot tuaja është të kufizoni sasinë e herëve që referoni të dhënat e fletës së punës në kodin tuaj. Është gjithmonë më pak efikase të rrëmbesh të dhëna nga fleta e punës sesa nga memoria. Kjo do të thotë, makrot tuaja do të funksionojnë shumë më shpejt nëse nuk duhet të ndërveprojnë në mënyrë të përsëritur me fletën e punës.
Për shembull, kodi i mëposhtëm i thjeshtë e detyron VBA-në të kthehet vazhdimisht te Sheets("Sheet1").Range("A1") për të marrë numrin e nevojshëm për krahasimin që kryhet në deklaratën If:
Për muajin e raportit = 1 deri në 12
If Range("A1").Vlera = Raport Muaj Pastaj
MsgBox 1000000 / Muaj Raporti
Fundi Nëse
Raporti i ardhshëm Muaj
Një metodë shumë më efikase është ruajtja e vlerës në Sheets("Sheet1").Range ("A1") në një variabël të quajtur MyMonth. Në këtë mënyrë, kodi i referohet ndryshores MyMonth në vend të fletës së punës:
Dim MyMonth si numër i plotë
MyMonth = Gama ("A1"). Vlera
Për muajin e raportit = 1 deri në 12
Nëse MyMonth = Raport Muaj Pastaj
MsgBox 1000000 / Muaj Raporti
Fundi Nëse
Raporti i ardhshëm Muaj
Merrni parasysh përdorimin e variablave për të punuar me të dhënat në memorie në krahasim me referencën e drejtpërdrejtë të fletëve të punës.