2016-08-16 77 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

相關問題