【发布时间】:2018-04-27 05:32:49
【问题描述】:
我在任何地方都找不到这个问题的答案,所以我希望你们能帮助我。我的 excel 宏经历了几次数据迭代。它自动过滤源文件、提取信息、处理数据,然后再次执行大约 50 次 - 每人一次。这是我的意思的一些代码,所有单独的子方法都可以正常工作并且非常快:
For j = 1 To names.Count
'filter the source by name, generate sheet
FilterName names(j)
'prepare data with the necessary dates
FillMasterDates dates(), j
Dim i As Long
Dim ending As Long
ending = Sheets("Daten").Rows.End(xlDown).Row
Dim cellvalue As String
'check dates, etc
For i = 1 To ending
cellvalue = Sheets("Daten").Cells(i, 1)
If cellvalue = "" Then
Exit For
End If
ColorCell (i)
FilterDate CStr(dates(i)), names(j)
Next i
'user data has been successfully gathered, copy over to final sheet
FillColumns j
Next j
整个代码运行大约需要 4~ 秒(假设我有大约 2000 行并且我为 50~ 人创建了一个新工作表),这很好。令人费解的是,尽管使用了Application.ScreenUpdating = False(在宏中较早,但此时仍处于活动状态),当 Excel 保持我的活动窗口时,运行宏的必要时间上升到惊人的 25~ 秒。一样的输入,一样的输出。所以简单地说 - 运行宏,从 excel 中跳出 - 宏需要大约 4-5 秒才能运行。运行宏但留在 excel 中并等待 - 25 秒。
我试过Application.WindowState = Application.WindowState、ActiveWindow.SmallScroll、DoEvents、Application.CalculateFull()。我尝试了不同的计算设置,但我并没有真正使用 Excel 固有的任何公式计算 - 我必须使用 Excel 作为接口,因为源文件是 *.xls 文件,最终输出必须保持这种格式。
如果您需要我提供更多代码 sn-ps 来理解它,请尽管提问。我已经被难住了两天了。
【问题讨论】: