Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 2007/2010/2013 VBA运行时错误范围类的特殊方法失败_Vba_Excel - Fatal编程技术网

Excel 2007/2010/2013 VBA运行时错误范围类的特殊方法失败

Excel 2007/2010/2013 VBA运行时错误范围类的特殊方法失败,vba,excel,Vba,Excel,通过下面的函数,我试图将公式粘贴到给定的列名中。下面的代码工作正常,但当我的数据达到65K行时,它抛出:PasteSpecial Method range class failed错误,并且我发现在65K行中,当我在下面的代码中运行时,物理内存使用量将为0,这可能是个问题,但任何人都可以帮助我逃避或克服这个问题 谢谢 尼康 在此,代码详细信息如下: 参数: FormatRng=包含包含公式的格式范围 DataRng=要粘贴复制公式的范围 ColArr()=此字符串数组包含要粘贴公式的列名 如果

通过下面的函数,我试图将公式粘贴到给定的列名中。下面的代码工作正常,但当我的数据达到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