Excel 2007/2010/2013 VBA运行时错误范围类的特殊方法失败
通过下面的函数,我试图将公式粘贴到给定的列名中。下面的代码工作正常,但当我的数据达到65K行时,它抛出:PasteSpecial Method range class failed错误,并且我发现在65K行中,当我在下面的代码中运行时,物理内存使用量将为0,这可能是个问题,但任何人都可以帮助我逃避或克服这个问题 谢谢 尼康 在此,代码详细信息如下: 参数:Excel 2007/2010/2013 VBA运行时错误范围类的特殊方法失败,vba,excel,Vba,Excel,通过下面的函数,我试图将公式粘贴到给定的列名中。下面的代码工作正常,但当我的数据达到65K行时,它抛出:PasteSpecial Method range class failed错误,并且我发现在65K行中,当我在下面的代码中运行时,物理内存使用量将为0,这可能是个问题,但任何人都可以帮助我逃避或克服这个问题 谢谢 尼康 在此,代码详细信息如下: 参数: FormatRng=包含包含公式的格式范围 DataRng=要粘贴复制公式的范围 ColArr()=此字符串数组包含要粘贴公式的列名 如果
如果您尝试复制/粘贴5000行(通过循环),会发生什么情况?这将减少处理器和内存上的负载,而不是
copy
和PasteSpecial
,您是否简单地尝试过:DataColRnge.Formula=FormatColRng.Formula
Copy
和Paste
是昂贵的操作,通常可以避免。我尝试过chunks逻辑,但失败了,因为一个公式包含200多个字符,所以可能会出现此问题,谢谢,@PhilipI还使用了范围到范围的逻辑,我知道它消耗的内存更少,直接从剪贴板复制/粘贴是一种很好的方式,但它不起作用,因为我接受它的“使excel挂起”。谢谢,@davidzementry在代码开始时禁用屏幕更新(Application.screenUpdate=False
)并将计算设置为手动(Application.calculation=xlCalculationManual
)。只需确保在结束函数之前重置它们(Application.screenUpdate=True
和Application.Calculation=xlCalculationAutomatic
)。
Public Function CompareFormat(FormatRng As Range, DataRng As Range, ColArr() As String)
Dim ColIndexArr() As Long
Dim i As Long
Dim DataColRng As Range
Dim FormatColRng As Rangeenter
ColIndexArr = getCompColumnsPosition(DataRng, ColArr())
FormatRng.Rows(1).Copy
DataRng.Rows(1).PasteSpecial xlPasteFormats, xlPasteSpecialOperationNone, False, False
Application.CutCopyMode = False
For i = LBound(ColIndexArr) To UBound(ColIndexArr)
If ColIndexArr(i) > 0 Then
Set DataColRng = Application.Intersect(DataRng.offset(1, 0), _
DataRng.Columns(ColIndexArr(i)))
Set FormatColRng = Application.Intersect(FormatRng.offset(1, 0), _
FormatRng.Columns(ColIndexArr(i)))
FormatColRng.Copy
DataColRng.PasteSpecial xlPasteFormulas
Application.CutCopyMode = False
End If
Next i
End Function