У меня есть подпрограмма, которая генерирует отчет о производительности различных портфелей в пределах 5 семейств. Дело в том, что портфели, о которых идет речь, никогда не бывают одинаковыми, как и сумма в каждой семье. Итак, я копирую и вставляю шаблон (который отформатирован и...) и добавляю отформатированную строку (содержащую формулу и...) в правильное семейство для каждого портфеля в отчете. Все работает просто отлично, код конечно не оптимален и идеален, но для того что нам нужно работает отлично. Проблема не в самом коде, а в том, что когда я выполняю код в первый раз, он выполняется очень быстро (например, 1 секунда)... но со второго раза код резко замедляется (почти 30 секунд для базового задача идентична первой). Я пробовал все расчеты вручную, не обновляя экран и ... но проблема действительно не в этом. Для меня это похоже на утечку памяти, но я не могу найти, в чем проблема! Почему код работает очень быстро, но оооочень медленнее сразу после... Какой бы ни была длина отчета и содержимое файла, мне нужно было бы закрыть Excel и снова открыть его для каждого отчета.
** Не уверен, что я понимаю, но это не потому, что код делает файл excel больше или что-то в этом роде, потому что после первого (быстрого) выполнения, если я сохраню книгу, закрою и снова открою ее, (новое) первое выполнение снова будет очень быстро, но если бы я сделал то же самое, не закрывая и не открывая снова, это было бы очень медленно...^!^!
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
Конец сабвуфера