Das VBA-Unterprogramm verlangsamt sich nach der ersten Ausführung erheblich

Ich habe ein Unterprogramm, das einen Bericht über die Leistung verschiedener Portfolios in 5 Familien erstellt. Die Sache ist, dass die fraglichen Portfolios niemals gleich sind und die Anzahl in jeder Familie auch nicht. Also kopiere ich, füge eine Vorlage ein (die formatiert ist und ...) und füge die formatierte Zeile (die die Formel und ... enthält) in die richtige Familie für jedes Portfolio im Bericht ein. Alles funktioniert gut, der Code ist natürlich nicht optimal und perfekt, aber es funktioniert gut für das, was wir brauchen. Das Problem ist nicht der Code selbst. Wenn ich den Code zum ersten Mal ausführe, geht er sehr schnell (wie 1 Sekunde) ... aber ab dem zweiten Mal verlangsamt sich der Code dramatisch (fast 30 Sekunden für ein Basic) Aufgabe identisch mit der ersten). Ich habe die ganze manuelle Berechnung ausprobiert, den Bildschirm nicht aktualisiert und ... aber es ist wirklich nicht so, wo das Problem herkommt. Es sieht aus wie ein Speicherleck für mich, aber ich kann nicht finden, wo das Problem liegt! Warum würde der Code sehr schnell laufen, aber gleich danach sooooo viel langsamer? Unabhängig von der Länge des Berichts und dem Inhalt der Datei müsste ich Excel schließen und für jeden Bericht erneut öffnen.

** Ich bin mir nicht sicher, ob ich klar bin, aber es liegt nicht daran, dass der Code die Excel-Datei vergrößert oder so, denn nach der ersten (schnellen) Ausführung, wenn ich die Arbeitsmappe speichere, schließe und öffne sie wieder, die (neue) erste Ausführung wird wieder sehr schnell sein, aber wenn ich das gleiche aufregende Ding gemacht hätte, ohne zu schließen und wieder zu öffnen, wäre es sehr langsam gewesen ... ^! ^!

Dim Family As String
Dim FamilyN As String
Dim FamilyP As String
Dim NumberOfFamily As Integer
Dim i As Integer
Dim zone As Integer


Sheets("RapportTemplate").Cells.Copy Destination:=Sheets("Rapport").Cells
Sheets("Rapport").Activate

i = 3
NumberOfFamily = 0
FamilyP = Sheets("RawDataMV").Cells(i, 4)
While (Sheets("RawDataMV").Cells(i, 3) <> "") And (i < 100)

    Family = Sheets("RawDataMV").Cells(i, 4)
    FamilyN = Sheets("RawDataMV").Cells(i + 1, 4)

    If (Sheets("RawDataMV").Cells(i, 3) <> "TOTAL") And _
    (Sheets("RawDataMV").Cells(i, 2) <> "Total") Then

        If (Family <> FamilyP) Then
            NumberOfFamily = NumberOfFamily + 1
        End If
        With Sheets("Rapport")
            .Rows(i + 8 + (NumberOfFamily * 3)).EntireRow.Insert
            .Rows(1).Copy Destination:=Sheets("Rapport").Rows(i + 8 + (NumberOfFamily * 3))
            .Cells(i + 8 + (NumberOfFamily * 3), 6).Value = Sheets("RawDataMV").Cells(i, 2).Value
            .Cells(i + 8 + (NumberOfFamily * 3), 7).Value = Sheets("RawDataMV").Cells(i, 3).Value
        End With
    End If
    i = i + 1
    FamilyP = Family
Wend

For i = 2 To 10
    If Sheets("Controle").Cells(16, i).Value = "" Then
        Sheets("Rapport").Cells(1, i + 11).EntireColumn.Hidden = True
    Else
        Sheets("Rapport").Cells(1, i + 11).EntireColumn.Hidden = False
    End If
Next i
Sheets("Rapport").Cells(1, 1).EntireRow.Hidden = True

'Define printing area
zone = Sheets("Rapport").Cells(4, 3).End(xlDown).Row
Sheets("Rapport").PageSetup.PrintArea = "$D$4:$Y$" & zone


Sheets("Rapport").Calculate
Sheets("RANK").Calculate
Sheets("SommaireGroupeMV").Calculate
Sheets("SommaireGroupeAlpha").Calculate
Application.CutCopyMode = False

End Sub

Antworten auf die Frage(3)

Ihre Antwort auf die Frage