Wie kann man diese Funktion schneller machen?

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Wie kann man diese Funktion schneller machen?

    Hi Leute,

    Ich lese Datensätze von zwei unterschiedlichen Instanzen ein, lade diese in meine eigene Datenstruktur, vermische beiden Datensätze und will sie mit einer WriteToSheet-Funktion in ein Sheet schreiben, in dem das Skript läuft.

    Visual Basic-Quellcode

    1. Public Function WriteToSheet(ByVal reqDict As Dictionary) As Boolean
    2. For i = 0 To reqDict.Count - 1
    3. Set curReq = reqDict.Items(i)
    4. With curReq
    5. wsNew.Cells(i + 2, 1).value = .curAttrId.GetText()
    6. End With
    7. Next it
    8. End Function


    Das Problem ist nun, dass obige Funktion beim Schreiben von ca. 1300 Zeilen (Datensätze) ca. 6s braucht, was ich etwas viel finde.
    Kann man vielleicht mit geschicktem Einsatz dieses With-Statements noch ein paar Sekunden Zeit rausholen? Normalerweise darf dieses Schreiben, nicht länger als 1s dauern; es handelt sich ja immerhin nur um 1300 Datensätze; vor allem weil man ja auch nur einen linearen Listen-Durchlauf hat.

    Edit: Oder kann man vielleicht mit einer Art Iterator noch Zeit rausholen? Oder geht da generell nix mehr, weil die ganzen Aufrufe der Setter-Methoden zu viel Zeit benötigen?
    Man kann ganz viel Zeit rausholen, wenn man die Daten erst in ein Array schreibt und dann das Array am Stück ins Sheet schreibt.

    Wenn du allerdings vor deiner Schleife Application.ScreenUpdating auf False setzt, wird das auch schon Wunder bewirken.
    Danach wieder auf True, sonst frierst du ein!
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Also das ScreenUpdating ist über die gesamte Funktion off.

    Wie stellst du dir das mit Array vor? Soll ich quasi ein mehrdimensionales Array dimensioniern und erst in dieses mit den einzelnen Getter den Text schreiben?

    Was verstehst du unter "und dann das Array am Stück ins Sheet schreiben"?