复制和粘贴行的不同方法

我试图加快一个VBA程序,它基本上从几个工作簿复制行的数据到三个主要的工作簿,并刷新其中的所有graphics。

我已经使用这个,我主要在我所有的程序中使用。

'Speed up With Excel.Application .ScreenUpdating = False .DisplayStatusBar = True .Calculation = Excel.xlCalculationManual .EnableEvents = False End With 

debugging我的代码,我意识到复制和粘贴部分要比其余的更多的时间,我试图重新编码它,并testing,所以我可以达到最快的解决scheme。 最初它是这样横跨3 differen下。 我发布一个,因为所有其他人主要是相同的。

 Cellsheet.Range("2:" & f2).Copy DataCell.Range((f + 1) & ":" & (f + f2)) DataCluster.Rows((f3 + 1) & ":" & (f3 + f4 - 1)).Hidden = False Clustersheet.Range("2:" & f4).Copy DataCluster.Range((f3 + 1) & ":" & (f3 + f4 - 1)) 

我试图避免使用我知道的剪贴板这将是最慢的解决scheme。 现在,我试图.Value = .Value的方法是这样的:

 DataCell.Range((f + 1) & ":" & (f + f2)).Value = Cellsheet.Range("2:" & f2).Value DataCluster.Range((f3 + 1) & ":" & (f3 + f4 - 1)).Value = Clustersheet.Range("2:" & f4).Value 

在这个例子中,当错误出现时,我试图复制2.000行或更less。

问题是这种方法程序或多或less在执行中显示“内存不足错误”,我想知道为什么会发生这种情况,如果有比.Copy目标更快的解决scheme。 事情。

你的编码是一个恐怖(@Sivaprasath更有礼貌,但我试图变得更有帮助:-))。 让它看起来像这样。

 DataCell.Range(Cells(R, C), Cells(R, C)).Value = Cellsheet.Range(Cells(R, C), Cells(R, C)).Value 

这里R代表“行”,C代表“列”。 每个可以是一个数字或一个数字的variables。 像Range("A1:B4") Range(Cells(1, 1), Cells(4, 2))将被写为像Range(Cells(1, 1), Cells(4, 2)) ,它直接比较看起来非常费力,但它比Range((f + 1) & ":" & (f + f2)) ,一旦你掌握了它,它是很容易操作的。 要加快你的任务,至关重要的是,你有精确的控制你的范围规格,这将避开你,而你没有明确的语法。

为了回应你的评论,我跑了这个testing。

 Private Sub CopyAndPaste() Dim Rng As Range Dim f As Long, f2 As Long Dim C As Long f = 4 f2 = 2046 C = 185 ' Set Rng = Cellsheet.Range(Cells(2, 1), Cells(f2, C)) Set Rng = ActiveSheet.Range(Cells(2, 1), Cells(f2, C)) Debug.Print Rng.Address, Rng.Cells.Count ' Set Rng = DataCell.Range(Cells((f + 1), 1), Cells(f + f2, C)) Set Rng = ActiveSheet.Range(Cells((f + 1), 1), Cells(f + f2, C)) Debug.Print Rng.Address, Rng.Cells.Count End Sub 

结果打印到“即时”窗口,并显示两个区域中的单元格数量不相同。 因此,这两个范围不能具有相同的大小和尺寸,因此在过去的操作中应该会出现错误。 我build议你多投入一点时间来控制variables。 但是,使用“目标”复制到目标单元格就足以指定单个单元格(左上angular),Excel将正确粘贴与指定单元格相关的整个复制范围。