在工作表之间切换时,复制/粘贴特殊偏移macros速度较慢

简介:我已经在这个macros上工作了很长时间,并且已经成功地完成了我所需要的工作,但是由于我的编码背景是最小的,所以我没有这样做。 因此,由于从一个工作表“FB MATE DATA”到另一个“Sheet 2(2)”复制和粘贴数据,来回切换的速度非常慢。

背景: CMM机器将测量数据吐出到电子表格中,我需要将整个X和Y列中的图纸从一张纸复制并粘贴到另一张纸上,并叠加在散点图中。 问题在于数据是非常规模式,需要使用偏移量,而不同的工作表具有以不同行开始的数据,所以macros必须考虑到这一点。 之所以这么慢,是因为我实现这个的方式是通过不断地激活每个工作表来回反复地保持对活动单元格的控制,而不是仅仅引用来自固定单元格的偏移量,这是由于偶尔的偏移改变连续。 我现在的代码是:

  • 向下循环到列A,直到find空白单元格为止
  • 转移到紧靠其下方的单元格并开始复制数据。 (这是非常重要的,因为前几行是与我无关的数据,而且它们与我所寻找的数据是分开的。)
  • 将偏移量(例如G21,K21,O21,S21,W21,AA21,AE21,AI21,AM21,AQ21,AU21,AY21,BG21)中范围(G:FZ)的数据复制到D73 :E:93。 注意不规则的模式(由于信息与我的情节无关)
  • 每两个代表一个X | Y对(例如,在Sheet 2中粘贴到D73中的X:G21,在Sheet 2中粘贴到E73中的Y:K21等)

问题:对于每一行数据,我需要以变化的间隔(第一列,第四列,第九列,第二列等)复制某些列,并将其粘贴到另一页上的两个X | Y列中。

数据抓取并不总是从G21开始。 有时第一个数据点可能是G24或G10或G15,因此macros为什么先search一个空行而不是从一个固定的位置拉出。 以下是通过前四栏的循环示例。

码:

Sub LocatorTest() 'Select first row of eligible spare pallet data Range("B73").Select Application.Goto (ActiveWorkbook.Sheets("FB MATE DATA").Range("A1")) Dim c For Each c In Range("A1:A100").Cells If c = "" Then c.Select Exit For End If Next ActiveCell.Offset(1, 6).Range("A1").Select Selection.Copy Sheets("Sheet2 (2)").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("C73").Select Worksheets("FB MATE DATA").Activate ActiveCell.Offset(rowOffset:=0, columnOffset:=4).Activate Selection.Copy Sheets("Sheet2 (2)").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("B74").Select Worksheets("FB MATE DATA").Activate ActiveCell.Offset(rowOffset:=0, columnOffset:=8).Activate Selection.Copy Sheets("Sheet2 (2)").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("C74").Select Worksheets("FB MATE DATA").Activate ActiveCell.Offset(rowOffset:=0, columnOffset:=12).Activate Selection.Copy Sheets("Sheet2 (2)").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 

任何帮助你可以提供可能是一个不同的方式来实现这一点,或使其运行更快将不胜感激。

哇,这可以使用一些主要的改进。

但为了简单起见,您可能需要将其放在一边:

 Application.Calculation = xlCalculationManual Application.ScreenUpdating = False 

这在你的macros的末尾:

 Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True 

这会给它巨大的速度提升。 下一个; 你应该尝试引用单元格而不激活…