我正在使用的处理工具遇到了问题,即初始挂起时间接近10秒。我确定的问题是,当最初将数据导入到其中时,它将继续更新5x1000工作区中的每个查找数组和功能。我一直认为,加快处理速度的一种好方法是将导入限制为非空单元格,但是无论我如何尝试都无法完成导入。
默认情况下,此功能是将RadGridExport临时文件中的数据导入到缓冲区表中以便以后处理的功能:
Sub CopyData()
Dim rng As Range
Set rng = Workbooks("RadGridExport.xls").Sheets(1).Range("A1:E1000")
ThisWorkbook.Sheets(2).Range("A1").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value
End Sub
我尝试使用IsEmpty(Cell.Value)方法,但效果不佳
Sub CopyData()
Dim rng As Range
Set rng = Workbooks("RadGridExport.xls").Sheets(1).Range("A1:E1000")
For Each Cell In rng
If IsEmpty(Cell.Value) = False Then
ThisWorkbook.Sheets(2).Range("A1").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value
End If
Next Cell
End Sub
实际上,它冻结了整个工作簿。那是我熟悉的唯一可以应用的方法,所以我有点死胡同。
是否有一种方法可以真正让我的初始函数忽略空单元格?还是我是用错误的方式来解决这个问题,并且有某种方法可以阻止工作表对每个单元进行完整的更新,包括那些值不变的单元?
答案 0 :(得分:1)
我设法找到了解决问题的方法。
首先感谢@Pᴇʜ提供了一种进行动态范围的方法-我最终没有在该工具中使用它,因为很多处理都依赖于某个范围内的静态单元格进行自动计算,但是我将其记下了未来!
@JvdV的建议很吸引人,将加载时间从平均31秒降低到14秒。
当前代码如下:
Sub CopyData()
Dim rng As Range
Set rng = Workbooks("RadGridExport.xls").Sheets(1).Range("A1:E1000").SpecialCells(2)
ThisWorkbook.Sheets(2).Range("A1").Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value
End Sub
然而,它仍然迫使所有静态值完全刷新-因此,在更深入地研究后,我意识到我在主宏中使用了一个庞大的清除门:
Sub clearAll()
Range("A:E").ClearContents
End Sub
这造成了巨大的14秒延迟。在我将该功能更改为此:
Dim Workspace As Range
Set Workspace = ThisWorkbook.Sheets(2).Range("A1:E1000")
For Each Cell In Workspace
If IsEmpty(Cell.Value) = False Then
Cell.ClearContents
End If
Next Cell
加载时间从14秒进一步减少到2秒以下。
再次感谢:)