2016-08-16 75 views
0

我有一个运行宏的活动打开工作簿。我需要打开另一个(新)工作簿,并从“新”文件的第一个工作表复制一系列单元格,并将这些行附加到当前工作簿中工作表的底部。我想避免使用剪贴板复制/粘贴。这里是我的代码:将范围从新工作簿复制到活动工作簿而不使用剪贴板

Sub getnewrows() 

Dim lngLast As Integer, newLast As Integer 
Dim NewRows As Workbook 
Dim MyWkbk As Workbook 
Dim rSrc As Range 
Dim rDst As Range 

Set MyWkbk = ActiveWorkbook 
Sheets(3).Select 
lngLast = Range("A" & Rows.Count).End(xlUp).Row 
Set NewRows = Application.Workbooks.Open("pathtomyfile.xls") 
newLast = NewRows.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row 

Set rSrc = NewRows.Sheets(1).Range("A5:L" & newLast) 
Set rDst = MyWkbk.Sheets(3).Range("A" & lngLast + 1) 

rDst = rSrc.Value 

NewRows.Close 

Set MyWkbk = ActiveWorkbook 
End Sub 

与我(目前)的工作簿已经打开开始,和“新”一个封闭的,当我运行宏,它仅复制了一个小区。

+0

和目标是不够好? –

+1

'Set rDst = MyWkbk.Sheets(3).Range(“A”&lngLast + 1)'或'Set rDst = MyWkbk.Sheets(3).Cells(lngLast + 1,“A”)'BTW'lngLast'尚未分配值,因此默认为零 –

+0

另外,如果您想在将数据提交到主文档之前过滤数据,则可以考虑在ADO中使用SQL。 –

回答

0

Cells不采用该类型的参数。

Set rDst = MyWkbk.Sheets(3).Ran‌​ge("A" & lngLast + 1) 

Set rDst = MyWkbk.Sheets(3).Cel‌​ls(lngLast + 1, "A") 

BTW lngLast尚未分配的值,所以会使用复制默认为零

+0

我试过了。它仅复制一个单元格值。 NewRows.Sheet(1).cells(“A5”)到Mywkbk.Sheets(3).Cells(lngLast + 1,“A”)中的一个。如何获得NewRows工作簿中第5行之后的全行和全部行?我已经更新了上面的代码。 – SD1717

+0

我懂了!我不得不更新设置Rdst到设置rDst = MyWkbk.Sheets(3).Range(“A”&lngLast + 1&“:L”&lngLast + 1 + newLast - 5) – SD1717

+0

我试图标记这个问题的答案,但是当我点击我不断收到的复选标记“发生错误,请重新尝试您的请求” – SD1717

相关问题