Smartsheet 9.1.1
Smartsheet is een dynamisch werkplatform waarmee u projecten kunt beheren, workflows kunt bouwen en kunt samenwerken met uw team.
Naarmate uw Excel-macro's steeds robuuster en complexer worden, kunt u merken dat ze prestaties verliezen. Bij het bespreken van macro's is het woord prestatie meestal synoniem met snelheid . Snelheid is hoe snel uw VBA-procedures hun beoogde taken uitvoeren. Hieronder volgen tien manieren om ervoor te zorgen dat uw Excel-macro's optimaal presteren.
Wist u dat elke keer dat een cel die een formule in uw spreadsheet beïnvloedt, wordt gewijzigd of gemanipuleerd, Excel het hele werkblad opnieuw berekent? In werkbladen met een groot aantal formules kan dit gedrag uw macro's drastisch vertragen.
U kunt de eigenschap Application.Calculation gebruiken om Excel te laten weten over te schakelen naar de handmatige berekeningsmodus. Wanneer een werkmap zich in de handmatige berekeningsmodus bevindt, wordt de werkmap pas opnieuw berekend als u expliciet een berekening activeert door op de F9-toets te drukken.
Zet Excel in de handmatige berekeningsmodus, voer uw code uit en schakel vervolgens terug naar de automatische berekeningsmodus.
Submacro1() Toepassing.Berekening = xlBerekeningHandmatig 'Plaats hier je macrocode Toepassing.Berekening = xlBerekeningAutomatisch Einde sub
Als u de berekeningsmodus weer instelt op xlCalculationAutomatic, wordt automatisch een herberekening van het werkblad gestart, dus u hoeft niet op F9 te drukken nadat uw macro is uitgevoerd.
U merkt misschien dat wanneer uw macro's worden uitgevoerd, uw scherm behoorlijk flikkert. Dit flikkeren is dat Excel probeert het scherm opnieuw te tekenen om de huidige staat van het werkblad weer te geven. Helaas, elke keer dat Excel het scherm opnieuw tekent, neemt het geheugenbronnen in beslag.
U kunt de eigenschap Application.ScreenUpdating gebruiken om schermupdates uit te schakelen totdat uw macro is voltooid. Het uitschakelen van schermupdates bespaart tijd en middelen, waardoor uw macro iets sneller kan worden uitgevoerd. Nadat uw macrocode is uitgevoerd, kunt u het bijwerken van het scherm weer inschakelen.
Submacro1() Toepassing.Berekening = xlBerekeningHandmatig Application.ScreenUpdating = False 'Plaats hier je macrocode Toepassing.Berekening = xlBerekeningAutomatisch Application.ScreenUpdating = True Einde sub
Nadat u de eigenschap ScreenUpdating weer op True hebt ingesteld, activeert Excel automatisch een nieuwe tekening van het scherm.
De Excel-statusbalk, die onderaan het Excel-venster verschijnt, geeft normaal gesproken de voortgang van bepaalde acties in Excel weer. Als uw macro met veel gegevens werkt, neemt de statusbalk enkele bronnen in beslag.
Het is belangrijk op te merken dat het uitschakelen van schermupdates los staat van het uitschakelen van de statusbalkweergave. De statusbalk wordt nog steeds bijgewerkt, zelfs als u het bijwerken van het scherm uitschakelt. U kunt de eigenschap Application.DisplayStatusBar gebruiken om updates van de statusbalk tijdelijk uit te schakelen, waardoor de prestaties van uw macro verder worden verbeterd:
Submacro1() Toepassing.Berekening = xlBerekeningHandmatig Application.ScreenUpdating = False Application.DisplayStatusBar = False 'Plaats hier je macrocode Toepassing.Berekening = xlBerekeningAutomatisch Application.ScreenUpdating = True Application.DisplayStatusBar = True Einde sub
U kunt macro's implementeren als gebeurtenisprocedures en Excel vertellen om bepaalde code uit te voeren wanneer een werkblad of werkmap verandert.
Soms brengen standaardmacro's wijzigingen aan die een gebeurtenisprocedure activeren. Als u bijvoorbeeld een standaardmacro hebt die meerdere cellen op Blad1 manipuleert, moet elke keer dat een cel op dat blad wordt gewijzigd, uw macro pauzeren terwijl de gebeurtenis Worksheet_Change wordt uitgevoerd.
U kunt een ander niveau van prestatieverbetering toevoegen door de eigenschap EnableEvents te gebruiken om Excel te laten weten gebeurtenissen te negeren terwijl uw macro wordt uitgevoerd.
Stel de eigenschap EnableEvents in op False voordat u uw macro uitvoert. Nadat uw macrocode is uitgevoerd, kunt u de eigenschap EnableEvents weer op True zetten.
Submacro1() Toepassing.Berekening = xlBerekeningHandmatig Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.EnableEvents = False 'Plaats hier je macrocode Toepassing.Berekening = xlBerekeningAutomatisch Application.ScreenUpdating = True Application.DisplayStatusBar = True Application.EnableEvents = True Einde sub
Elke keer dat uw macro het aantal rijen wijzigt, het aantal kolommen wijzigt of de pagina-instelling van een werkblad wijzigt, moet Excel de tijd nemen om de pagina-einden op het blad opnieuw te berekenen.
U kunt dit gedrag voorkomen door simpelweg de pagina-einden te verbergen voordat u uw macro start.
Stel de bladeigenschap DisplayPageBreaks in op False om pagina-einden te verbergen. Als u pagina-einden wilt blijven weergeven nadat uw macro is uitgevoerd, stelt u de bladeigenschap DisplayPageBreaks weer in op True.
Submacro1() Toepassing.Berekening = xlBerekeningHandmatig Application.ScreenUpdating = False Application.DisplayStatusBar = False Application.EnableEvents = False Activesheet.DisplayPageBreaks = False 'Plaats hier je macrocode Toepassing.Berekening = xlBerekeningAutomatisch Application.ScreenUpdating = True Application.DisplayStatusBar = True Application.EnableEvents = True Activesheet.DisplayPageBreaks = True Einde sub
Als uw macro draaitabellen manipuleert die grote gegevensbronnen bevatten, kunt u slechte prestaties ervaren bij het dynamisch toevoegen of verplaatsen van draaivelden.
U kunt de prestaties van uw macro verbeteren door de herberekening van de draaitabel uit te stellen totdat alle wijzigingen in het draaiveld zijn aangebracht. Stel de eigenschap PivotTable.ManualUpdate in op True om herberekening uit te stellen, voer uw macrocode uit en stel vervolgens de eigenschap PivotTable.ManualUpdate weer in op False om de herberekening te activeren.
Submacro1() ActiveSheet.PivotTables("PivotTable1").ManualUpdate=True 'Plaats hier je macrocode ActiveSheet.PivotTables("PivotTable1").ManualUpdate=False Einde sub
Het is belangrijk om te onthouden dat hoewel Macro Recorder tijd bespaart door VBA-code voor u te schrijven, het niet altijd de meest efficiënte code schrijft. Een goed voorbeeld is hoe Macro Recorder elke kopieer- en plakactie vastlegt die u tijdens het opnemen uitvoert.
U kunt uw macro's een lichte boost geven door de tussenpersoon uit te schakelen en een directe kopie van de ene cel naar een bestemmingscel uit te voeren. Deze alternatieve code gebruikt het argument Destination om het klembord te omzeilen en de inhoud van cel A1 rechtstreeks naar cel B1 te kopiëren.
Bereik ("A1"). Bestemming kopiëren: = Bereik ("B1")
Als u alleen waarden hoeft te kopiëren (geen opmaak of formules), kunt u de prestaties nog verder verbeteren door de kopieermethode helemaal te vermijden. Stel eenvoudig de waarde van de doelcel in op dezelfde waarde als in de broncel. Deze methode is ongeveer 25 keer sneller dan de kopieermethode:
Bereik ("B1"). Waarde = Bereik ("A1"). Waarde
Als u alleen formules van de ene cel naar de andere wilt kopiëren (geen waarden of opmaak), kunt u de formule van de doelcel instellen op dezelfde formule als in de broncel:
Bereik ("B1").Formule = Bereik ("A1").Formule
Bij het opnemen van macro's manipuleert u hetzelfde object vaak meer dan eens. U kunt tijd besparen en de prestaties verbeteren door het With-statement te gebruiken om verschillende acties op een bepaald object in één keer uit te voeren.
De With-instructie die in het volgende voorbeeld wordt gebruikt, vertelt Excel om alle opmaakwijzigingen in één keer toe te passen:
Met bereik ("A1"). Lettertype .Vet = Waar .Cursief = True .Onderstrepen = xlUnderlineStyleSingle Eindigt met
Door de gewoonte aan te nemen om acties in With-statements op te delen, blijven uw macro's niet alleen sneller werken, maar wordt het ook gemakkelijker om uw macrocode te lezen.
Macro Recorder gebruikt graag de Select-methode om objecten expliciet te selecteren voordat er actie op wordt ondernomen. Het is over het algemeen niet nodig om objecten te selecteren voordat u ermee gaat werken. U kunt de macroprestaties zelfs drastisch verbeteren door de Select-methode niet te gebruiken.
Maak er na het opnemen van uw macro's een gewoonte van om de gegenereerde code te wijzigen om de Select-methoden te verwijderen. In dit geval ziet de geoptimaliseerde code er als volgt uit:
Bladen ("Blad1"). Bereik ("A1").FormuleR1C1 = "1000" Bladen ("Blad2"). Bereik ("A1").FormuleR1C1 = "1000" Bladen ("Blad3"). Bereik ("A1").FormuleR1C1 = "1000"
Merk op dat het niets wordt geselecteerd. De code gebruikt eenvoudig de objecthiërarchie om de benodigde acties toe te passen.
Een andere manier om uw macro's te versnellen, is door het aantal keren dat u naar werkbladgegevens in uw code verwijst, te beperken. Het is altijd minder efficiënt om gegevens uit het werkblad te halen dan uit het geheugen. Dat wil zeggen dat uw macro's veel sneller zullen werken als ze niet herhaaldelijk met het werkblad hoeven te communiceren.
De volgende eenvoudige code dwingt VBA bijvoorbeeld om continu terug te keren naar Spreadsheets ("Sheet1"). Range ("A1") om het nummer te krijgen dat nodig is voor de vergelijking die wordt uitgevoerd in de If-instructie:
Voor ReportMonth = 1 tot 12 If Range ("A1"). Waarde = ReportMonth Dan MsgBox 1000000 / ReportMonth Stop als Volgende VerslagMaand
Een veel efficiëntere methode is om de waarde in Spreadsheets ("Sheet1").Range ("A1") op te slaan in een variabele met de naam MyMonth. Op deze manier verwijst de code naar de MyMonth-variabele in plaats van naar het werkblad:
Dim MyMonth als geheel getal MijnMaand = Bereik ("A1"). Waarde Voor ReportMonth = 1 tot 12 Als MyMonth = ReportMonth Dan MsgBox 1000000 / ReportMonth Stop als Volgende VerslagMaand
Overweeg om variabelen te gebruiken om met gegevens in het geheugen te werken in plaats van rechtstreeks naar werkbladen te verwijzen.
Bij het aanroepen van een methode of eigenschap van een object moet deze via de IDispatch-interface van de OLE-component gaan. Het aanroepen van deze OLE-componenten kost tijd, dus het verminderen van het aantal verwijzingen naar OLE-componenten kan de snelheid van de macrocode verbeteren.
Voor het aanroepen van objecteigenschappen of -methoden wordt doorgaans de representatiemethode Object.Method gebruikt, dat wil zeggen de "." symbool wordt gebruikt om eigenschappen en methoden aan te roepen.
Daarom kan het aantal methode- of eigenschapaanroepen worden beoordeeld aan de hand van het aantal symbolen ".". Hoe minder de "." symbool, hoe sneller de code wordt uitgevoerd.
De volgende verklaring bevat bijvoorbeeld 3 symbolen ".".
ThisWorkbook.Sheet1.Range("A1").Value = 100
De volgende verklaring heeft slechts één symbool ".".
Activewindow.Top = 100
Hier zijn enkele trucs om het aantal symbolen "." sneller te rennen.
Als u herhaaldelijk naar hetzelfde object moet verwijzen, kunt u het object eerst op een variabele instellen om het aantal aanroepen te verminderen. Voor de volgende code zijn bijvoorbeeld twee oproepen per lijn vereist.
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = 100
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = 200
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = 300
Omdat er herhaaldelijk naar het object Sheets("Sheet1") moet worden verwezen, kan het eerst worden ingesteld op een variabele sht , zodat elke code slechts één keer hoeft te worden aangeroepen.
Set sht = ThisWorkbook.Sheets("Sheet1")
sht.Cells(1, 1) = 100
sht.Cells(2, 1) = 200
sht.Cells(3, 1) = 300
Ten tweede: als je een tijdelijke variabele sht niet wilt declareren, kun je ook de eerder genoemde With- instructie gebruiken. Zoals blijkt uit het volgende voorbeeld:
With ThisWorkbook.Sheets("Sheet1")
.Cells(1, 1) = 100
.Cells(2, 1) = 200
.Cells(3, 1) = 300
End With
Ten derde: als er veel lussen zijn, probeer dan de eigenschappen en methoden buiten de lus te houden. Wanneer u een eigenschapswaarde van hetzelfde object in een lus hergebruikt, kunt u eerst de eigenschapswaarde toewijzen aan een opgegeven variabele buiten de lus en vervolgens de variabele in de lus gebruiken, waardoor een hogere snelheid kan worden bereikt. Zoals blijkt uit het volgende voorbeeld:
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = Cells(1, 2).Value
Next i
Elke lus in dit voorbeeld krijgt de eigenschap Value van de cel Cells(1,2). Als u de eigenschap Value van Cells(1.2) aan een variabele toewijst voordat de lus begint, krijgt u een snellere run. Zoals blijkt uit het volgende voorbeeld:
tmp = Cells(1, 2).Value
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = tmp
Next i
De bovenstaande code roept ThisWorkbook.Sheets("Sheet1") aan elke keer dat deze wordt herhaald. U kunt dit sneller doen door de With- instructie te gebruiken om de aanroep naar ThisWorkbook.Sheets("Sheet1") buiten de lus te verplaatsen. Zoals blijkt uit het volgende voorbeeld:
tmp = Cells(1, 2).Value
With ThisWorkbook.Sheets("Sheet1")
For i = 1 To 1000
.Cells(1, 1) = tmp
.Cells(2, 1) = tmp
.Cells(3, 1) = tmp
Next i
End With
Beginners geven er meestal de voorkeur aan variabelen van het Variant-type te gebruiken, wat het voordeel heeft dat ze minder ingewikkeld zijn, omdat elk type gegevens kan worden gebruikt zonder het probleem van geheugenoverloop als de gegevens te groot zijn voor de gegevenstypen Integer of Long. Gegevens van het Varienmt-type vereisen echter meer extra geheugenruimte dan de andere gespecificeerde typen (2 bytes voor integer-gegevens, 4 bytes voor lange gegevens en 16 bytes voor variantgegevens). VBA heeft meer tijd nodig om gegevens van het variant-type te verwerken dan andere gespecificeerde typen Van de gegevens. Zoals het volgende voorbeeld laat zien.
Sub VariantTest()
Dim i As Long
Dim ix As Integer, iy As Integer, iz As Integer
Dim vx As Variant, vy As Variant, vz As Variant
Dim tm As Date
vx = 100: vy = 50
tm = Timer
For i = 1 To 1000000
vz = vx * vy
vz = vx + vy
vz = vx - vy
vz = vx / vy
Next i
Debug.Print "Variant types take " & Format((Timer - tm), "0.00000") & " seconds"
ix = 100: iy = 50
tm = Timer
For i = 1 To 1000000
iz = ix * iy
iz = ix + iy
iz = ix - iy
iz = ix / iy
Next i
Debug.Print "Integer types take " & Format((Timer - tm), "0.00000") & " seconds"
End Sub
In de bovenstaande code voeren de regels 8 tot en met 13 1 miljoen bewerkingen uit op het gebied van optellen, aftrekken, vermenigvuldigen en delen van variantvariabelen, en voeren de regels 17 tot en met 22 1 miljoen bewerkingen uit op het gebied van optellen, aftrekken, vermenigvuldigen en delen van gehele variabelen. Op mijn computer duurde de werking van de Variant-variabele ongeveer 0,09375 seconden, terwijl de werking van de Integer-variabele ongeveer 0,03125 seconden duurde. De resultaten kunnen variëren van computer tot computer, maar Variantvariabelen zijn aanzienlijk langzamer dan Integer-variabelen .
Om deze reden wordt aanbevolen om het gebruik van variantvariabelen te vermijden wanneer u expliciet het opgegeven gegevenstype kunt gebruiken .
Smartsheet is een dynamisch werkplatform waarmee u projecten kunt beheren, workflows kunt bouwen en kunt samenwerken met uw team.
SharePoint is een webgebaseerd samenwerkingssysteem dat gebruikmaakt van een verscheidenheid aan workflowtoepassingen, “lijst”-databases en andere webcomponenten, evenals beveiligingsfuncties om controle te geven over de samenwerking van bedrijfsgroepen.
Van Nien Agenda is een applicatie voor het bekijken van agenda's op uw telefoon, waarmee u snel de lunisolaire datum op uw telefoon kunt zien en zo uw belangrijke werk kunt regelen.
Microsoft Outlook is een bedrijfs- en productiviteitsapplicatie ontwikkeld door Microsoft Corporation.
ClickUp is een van de hoogst gewaardeerde productiviteitsplatforms voor elk bedrijf. Grote bedrijven zoals Google, Booking.com, San Diego Padres en Uber gebruiken allemaal ClickUp om de productiviteit op de werkplek te verhogen.
PDF is een veelgebruikt formaat geworden voor het lezen, maken en verzenden van tekstdocumenten. Op zijn beurt is er een toename geweest in het aantal programma's dat voor dit soort documentatie wordt gebruikt. PDF-XChange Viewer behoort tot een groeiend aantal PDF-viewers.
Apache OpenOffice biedt een compleet pakket Office-applicaties die wedijveren met Microsoft 365, vooral in Excel, PowerPoint en Word. Hiermee kunt u uw projecten effectiever beheren en worden verschillende bestandsformaten ondersteund.
iTaxViewer-software is tegenwoordig de populairste software voor het lezen van XML-bestanden. Deze software is een applicatie voor het lezen van elektronische belastingaangiften in XML-formaat van de Algemene Afdeling Belastingen.
Nitro PDF Reader is een handige PDF-editor die alle basistaken dekt die de meeste mensen dagelijks uitvoeren met PDF-documenten.
Foxit Reader is in de eerste plaats een PDF-lezer en biedt u ook de mogelijkheid PDF-bestanden te maken, te ondertekenen, te bewerken en aantekeningen toe te voegen. Het werkt op besturingssystemen, er zijn plug-ins voor verschillende programma's uit het Microsoft Office-pakket.