在没有剪贴板的工作簿之间复制/粘贴variables数据集

我一直在试图优化我的一些编码,并设法削减和加速了很多。 不过有些东西还是挺笨的(我还是个小菜鸟)。 Backstory是我的代码是打开源文件和目标文件,复制大量可变长度的数据,closures源代码然后执行大量的操作,最后保存目标文件。

我喜欢的一件事是如果可能的话,直接复制数据而不使用剪贴板,激活工作簿,select工作表(无论这些工作是否可以打包成更高效的代码)

Windows("SOURCE.xlsm").Activate Sheets("Data").Select Range("A2:AX10").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Windows("TARGET.xlsm").Activate Range("A2").Select ActiveSheet.Paste Application.CutCopyMode = False 

是否可以在SOURCE文件 – 数据表中进行select(A2:AX10,直到最后一行),并直接将其复制到TARGET文件 – 数据表单元格A2中,而不使用剪贴板。

之所以使用A2:AX10然后select下来,是因为我在整个数据集中有很多空白单元,这样我就可以得到整个数据。

我希望能够做到这一点,并把它用作这一行的范围

 Workbooks(“SOURCE”).Worksheets("Data").Range(“A2:AX10 & ALLTHEWAYDOWN”).Copy _Workbooks(“TARGET”).Worksheets("Data").Range(“A2") 

我试图解决这个问题,但我并没有达到预期的结果。 当我尝试做select和范围设置,然后试图复制范围与活动工作簿,并在直接复制模式下,我得到1004错误。

有没有可能优化这个块,使其工作。 这会提高我的VBA很多。

谢谢,

你需要这样的东西:

 With Workbooks("SOURCE.xlsm").Sheets("Data") .Range("A2:AX10", .Range("A2:AX10").End(xlDown)).Copy Workbooks("TARGET.xlsm").ActiveSheet.Range("A2") End With 

你大概也可以使用CurrentRegion而不是End(xlDown

您可以将一个范围的值(您想要粘贴值的范围)设置为等于源范围的值(您之前已经复制的范围)。

 Sub paste_values() Dim wb_A As Workbook, ws_A As Worksheet Dim wb_B As Workbook, ws_B As Worksheet Dim last_row As Long Set wb_A = ThisWorkbook Set ws_A = wb_A.Sheets(1) Set wb_B = Workbooks("WorkbookB") Set ws_B = wb_B.Sheets(1) With ws_A last_row = .Range("A" & .Rows.Count).End(xlUp).Row End With ws_B.Range("A2:AX" & last_row).Value = ws_A.Range("A2:AX" & last_row).Value End Sub 

此代码将新范围的值设置为等于原始范围。 它可以防止需要激活工作表或工作簿,同时也可以在不填写剪贴板的情况下将数据复制到一个范围。

我还build议使用last_row = .Range("A" & .Rows.Count).End(xlUp).Row来查找数据的最后一行。 尽pipe您确实需要确保在包含连续数据的列上使用此列。