Vertraging code

Status
Niet open voor verdere reacties.

VBAn00b

Gebruiker
Lid geworden
22 feb 2008
Berichten
17
Beste forumleden,

Wij hebben de volgende code:

Code:
 Range("J18:J250").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

En:
Code:
 Range("B10").Copy
    Range("B11").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Deze code functioneert goed echter wij hebben het idee dat er een manier is om deze code te vereenvoudigen en er zo voor te zorgen dat de code sneller loopt. Het zijn eenvoudige copy/paste codes maar we hebben ergens gelezen dat deze formules de uitvoeringssnelheid sterk benadelen.

Ook onze trim functie zou sneller ook moeten kunnen:

Code:
 Range("B18:B250").Select
        Dim Cell As Range
        On Error Resume Next
        For Each Cell In Intersect(Selection, _
           Selection.SpecialCells(xlConstants, xlTextValues))
          Cell.Value = Application.Trim(Cell.Value)
        Next Cell
        On Error GoTo 0

Onze vraag is dan ook: welke aanpassingen kunnen wij doorvoeren zodat de code eenvoudiger is en sneller wordt uitgevoerd?

Onze VBA kennis is vrij beperkt, het kan dus zijn dat wij er helemaal naast zitten, in dat geval horen wij het ook graag!

Alvast bedankt,

VBAn00b
 
Ik ga ervan uit dat je met de eerste twee stukjes code wilt bereiken dat je een formule (en de daaruit volgende waarde) als waarde wilt kopieren in dezelfde cellen (1e code) en in een rij lager (2e code).
Mijns inziens zijn die twee stukjes code prima en kan dat niet sneller. Maar moet dat dan? Bij mij zouden die codes millieseconden in beslag nemen...

De derde code zou je iets anders kunnen schrijven voor de leesbaarheid, dat levert iets snelheidswinst op, denk ik:
Code:
    Dim Cell As Range
    Dim isect
    Dim rng As Range
    
    On Error Resume Next
    
    Set rng = Range("B18:B250")
    'If Intersect(rng, rng.SpecialCells(xlConstants, xlTextValues)) Is Nothing Then Exit Sub
    
    Set isect = Intersect(rng, rng.SpecialCells(xlConstants, xlTextValues))
    If Not IsEmpty(isect) Then
        For Each Cell In isect
            Cell.Value = Application.Trim(Cell.Value)
        Next Cell
    End If
    
    On Error GoTo 0

Volgens voorbeelden moet je niet "If Not IsEmpty(isect) Then" gebruiken maar:"If Not (isect Is Nothing) Then" maar dat werkt bij mij niet (Excel2007). Mogelijk dat je die code nog moet aanpassen in Excel 2003?

Succes!
 
Beste etri,

Bedankt voor het beantwoorden van onze vraag. Je hebt gelijk als je zegt dat het slechts miliseconden scheelt, we hebben veel van soortgelijke codes in het project staan, veel kleine beetjes zijn samen iets groter. Daarnaast is de snelheid van de berekening erg belangrijk voor ons eindresultaat.

We gaan jouw code zeer zeker proberen, dan zijn we in ieder geval van de .select af (iets wat de code merkbaar vertraagt).

Nogmaals bedankt! :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan