• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

SpeedUp excel

Status
Niet open voor verdere reacties.

Spiderman

Gebruiker
Lid geworden
8 sep 2000
Berichten
866
Hoi allemaal,

Lang geleden :D

Vraagje:
Ik heb hier een 50.000 excel bestanden met gekopieerde website info.
Uit deze 50.000 bestanden moet bepaalde gegevens worden gehaald, en in 1 excel bestand worden gezet :cool:.

Het hele proces werkt, alleen het probleem is dat hij na ieder bestand een beetje langsamer wordt, met als gevolg dat na een bestand of 200 hij super traag wordt.

Ik zet iedere variabele die ik met SET zet aan het einde van iedere loop met SET xxx = Nothing.

Heeft er iemand nog tips om ervoor te kunnen zorgen dat excel niet langsamer wordt?
 
Hoi Arno,

alles goed? ;)

Kunnen we de code zien om gerichte aanbevelingen te kunnen doen?

Wigi
 
Hoi Arno,

alles goed?

Yeps OK, druk maar goed........


De hele code opsturen is te veel, dus hier een paar kleine stukjes. De rest van de code is een beetje van hetzelfde.





Stukje declaraties
Code:
Dim wkb As Workbook
Dim Sh As Worksheet
[COLOR="Red"]Dim r_Geboekt_op As Range[/COLOR]
[COLOR="Orange"]Dim Totaal_ontvangen As String[/COLOR]


Stukje Openen van iedere bestand (een voor een) en bekijken van iedere sheet.
Code:
Set wkb = Workbooks.Open(sFile, ReadOnly:=True)

' lees ieder worksheet
On Error GoTo FAILED_WKB
For Each Sh In wkb.Worksheets

Zoeken naar de tekst
Code:
                [COLOR="orange"]Totaal_ontvangen [/COLOR]= Trim(Replace([COLOR="SeaGreen"]FindCell[/COLOR](Sh, "Totaal ontvangen: ", False).Value, "Totaal ontvangen: ", ""))
..........................

Function [COLOR="seagreen"]FindCell[/COLOR](Sh As Worksheet, Search As String, CaseMatch As Boolean, Optional FindFrom As String = "A1") As Range

    ''MsgBox Search
    Dim r As Range
    
    Set r = Sh.Cells.Find(What:=Search, After:=Range(FindFrom), LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=CaseMatch _
        , SearchFormat:=False)
    Set FindCell = r
    Set r = Nothing
    
End Function

Het weer 'resetten' van de vars
Code:
wkb.Close
Set Sh = Nothing
[COLOR="red"]Set r_Geboekt_op = Nothing[/COLOR]
 
Daar kan ik niet veel aan toevoegen. Ik zou het op ongeveer dezelfde wijze gedaan hebben.

VBA is wel "traag" als het gaat over strings. Daarom kan de Replace wel beter gedaan worden met een Right. Zie ook hier voor wat lectuur: http://www.dailydoseofexcel.com/archives/2004/12/06/string-function-efficiency/ Kan misschien een verschil maken.

Verder:

Wat met ScreenUpdating? Calculation?

Gebruik je de Statusbalk voor het weergeven van de vooruitgang? Of iets anders?

enz...

Wigi
 
Hoi Wigi,

Wat met ScreenUpdating? Calculation?
Staan uit en op manueel.
Statusbalk wordt gebruikt voor de voorgang, en elke 250 bestanden wordt er een save van het hoofdbestand gedaan.

Ik weet het ook niet meer. Ik heb het gisteren voor ik weg ging aan gelaten, en met een beetje geluk is het maandag klaar :evil:
 
Ho Wigi,

Ik heb in het begin de save op 1000 gehad, maar excel heeft een aantal keren een fatale error gehad, en dan was er toch wel veel tijd verloren, vandaar dat hij op 250 is gezet.

Wat de statusbalk betref, deze heb ik ook uit gezet gehad, maar dat leverde ook niets op.
Dat de balk veel tijd kost, valt eigenlijk wel mee. Volgens het voorbeeld doet hij 10.000 met statusbalk in 1.5 sec en zonder balk in 0.16 sec. Dat is dus een vershil van 1.34 sec (dat is 0,000134 per record:))
 
Volgens het voorbeeld doet hij 10.000 met statusbalk in 1.5 sec en zonder balk in 0.16 sec. Dat is dus een vershil van 1.34 sec (dat is 0,000134 per record:))

Je moet het niet per record zien he...

0.16 tov 1.5 is 90 % tijdswinst... ;)
 
0.16 tov 1.5 is 90 % tijdswinst...

Das waar, maarja ik denk niet dat dit het probleem opgelost/vermindert zou hebben :rolleyes:

In ieder geval, de lijsten zijn er helemaal doorheen. Ik heb ze afgelopen vrijdag op een andere computer aangezet. Hierop gingen ze ook langzamer lopen, maar wel stabieler, resultaat, de lijsten zijn gedaan.

Wigi, vriendelijk bedankt voor het meedenken, en tot de volgende keer meer weer.
 
Heet heeft inderdaad met de computereigenschappen nodig. Veel rekenwerk vereist een krachtige processor en veel geheugen. Het liefst met een lage latentie ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan