下午好,
我正在运行一个宏,该宏将数据复制到另一个工作簿并自动保存该工作簿。问题在于每一行都包含一张图片,这使它成为一个很大的文件,最大为30mb。因此,代码需要一段时间才能完成,并且当我尝试再次运行它时,Excel会完全冻结,因此我必须强制关闭它。当我复制较少的行时,它保持稳定。我想知道这是否是剪贴板问题,但事实并非如此。我怎么只能运行一次?是缓存问题还是什么?我已经在使用压缩图片和application.screenupdating&enablevents = false。
预先感谢
下面的代码导致冻结,基本上需要调整第6行之后的每张图片。
For Each pic In Ws3.Pictures
pic.Select
If Selection.TopLeftCell.Row > 6 Then
With Selection
.Height = .TopLeftCell.RowHeight * 0.9
.Width = .Height * PicWtoHRatio
.Top = .TopLeftCell.Top + (.TopLeftCell.RowHeight - .Height) / 2
.Left = .TopLeftCell.Left + (.TopLeftCell.Width - .Width) / 2
End With
End If
Next pic
End Sub
每当我尝试复制粘贴> 100行时,该问题也会在代码的另一部分出现,excel似乎冻结了。我正在使用cutcopy = False。
答案 0 :(得分:1)
如果使用循环,则可以在每次迭代的开始处添加DoEvents
。它使Excel有时间处理用户事件,而不是冻结。
While condition
DoEvents
...
Wend
答案 1 :(得分:1)
当我在一个文件中有20个数据透视表并引用其他20个文件并需要更新时,我遇到了类似的问题。我无法避免崩溃,因为excel达到1.3GB左右的内存使用量时将冻结。
如果您真的没有任何计算功能,请关闭自动计算功能
在循环中执行类似activeworkbook的操作。保存每次迭代。保存文件将有助于清除一些内存,但是由于您的文件为30MB,因此可能无法解决很多问题。
因此,您还需要执行以下操作:
但是,如果您的代码在每个循环中都达到极限(每次迭代都崩溃),那么我的答案也将无效,需要优化代码。
答案 2 :(得分:0)
您也可以禁用自动计算。
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = xlCalculationAutomatic
这可能会有所帮助!
如果要处理大型Excel文件,则应该具有功能强大的硬件和软件。
64位版本的Excel与大型文件配合使用效果更好。