我有一个子程序,可以生成 5 个家庭中不同投资组合的业绩报告。问题是,有问题的投资组合从来都不相同,每个家庭的金额也不相同。因此,我复制粘贴一个模板(即格式化和...),并将格式化行(包含公式和...)添加到报告中每个投资组合的正确系列中。一切正常,代码当然不是最佳和完美的,但它可以很好地满足我们的需要。问题不在于代码本身,而是当我第一次执行代码时,它运行得非常快(比如 1 秒)......但是从第二次开始,代码速度显着变慢(基本的 30 秒任务与第一个相同)。我尝试了所有手动计算,没有刷新屏幕......但这确实不是问题所在。对我来说,这看起来像是内存泄漏,但我找不到问题出在哪里!为什么代码运行得非常快,但之后却慢得多……无论报告的长度和文件的内容如何,我都需要关闭 excel 并为每个报告重新打开它。
**不确定我是否清楚,但这不是因为代码使excel文件变大或什么,因为在第一次(快速)执行后,如果我保存工作簿,关闭并重新打开它,(新)第一次执行会再次非常快,但如果我会在不关闭和重新打开的情况下做同样的 excat 事情,那将会非常慢......^!^!
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
结束子