![](/img/trans.png)
[英]Copy specific data from one workbook and paste it into another workbook (paste from second row)
[英]VBscript: Copy/Paste data from one workbook to next blank row (specific cells) of another workbook
我只是VBscript(和代碼)的新手。 嘗試使用“ Excel宏-VBA”將數據從一個工作簿復制/粘貼到另一工作簿的下一個空白行時,我遇到問題。
例如:我想將范圍從工作簿1的A2復制到A4(或更多)到工作簿2的A4(空白行),然后將范圍從工作簿1的C2復制到C4(或更多)到E4(空白行)。 )的工作簿2。我正在使用“ Do..Loop”方法。
執行新的答案代碼后,這是我的問題:
---------- A ----------------- E
1 ------標題-------------標題
2 ------(空白)------------ bbb1
3 ------ aaa2 ------------- PasteC1 <- (BLANK)單元格已被替換
4 ------粘貼A1 --------- 粘貼C2
5 ------粘貼A2 --------- 粘貼C3
6 ------粘貼A2 ---------
7
我希望它是:
---------- A ----------------- E
1 ------標題-------------標題
2 ------(空白)------------ bbb1
3 ------ aaa2 ------------ (空白)
4 ------粘貼A1 -------- 粘貼C1
5 ------粘貼A2 -------- 粘貼C2
6 ------粘貼A2 -------- 粘貼C3
7
它正確地粘貼了范圍A中的數據,但是從“ B”數據中,代碼將數據粘貼到了與“ A”數據相比的下一行中,而不是粘貼到了“ A”數據旁邊的單元格中。 我希望代碼正確粘貼到單元格。 我考慮使用“ IF”或“ FOR”語句,但是對此我沒有任何想法。
這是我用Dan的答案編輯的代碼,但問題仍然存在:
'Copy "A" data
With srcWorksheet
LastSrcRow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
With destWorksheet
LastDestRow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
Set srcRange = srcWorksheet.Range(srcWorksheet.Cells(10, 1), srcWorksheet.Cells(LastSrcRow, 1))
srcRange.Copy
destWorksheet.Range(destWorksheet.Cells(LastDestRow + 1, 1), destWorksheet.Cells(LastDestRow + LastSrcRow - 1, 1)).Select
destWorksheet.Paste
'Copy "B" data
With srcWorksheet
LastSrcRow = .Range("B" & .Rows.Count).End(xlUp).Row
End With
With destWorksheet
LastDestRow = .Range("B" & .Rows.Count).End(xlUp).Row
End With
Set srcRange = srcWorksheet.Range(srcWorksheet.Cells(10, 2), srcWorksheet.Cells(LastSrcRow, 2))
srcRange.Copy
destWorksheet.Range(destWorksheet.Cells(LastDestRow + 1, 2), destWorksheet.Cells(LastDestRow + LastSrcRow - 1, 2)).Select
destWorksheet.Paste
我已經在許多站點上進行了研究,但仍未找到解決方案。
請幫我。
感謝並原諒我的英語不好。
當您運行以下代碼時,您是否仍會遇到交錯的Excel粘貼行為?
Sub copy2excel()
Set sourceExcel = CreateObject("Excel.Application")
sourceExcel.Visible = True
Set destExcel = CreateObject("Excel.Application")
destExcel.Visible = True
'Open the source and the destination files
Set srcWorkBook = sourceExcel.Workbooks.Open("C:\Your\Filepath\Here.xls")
Set destWorkbook = destExcel.Workbooks.Open("C:\Your\OtherFilepath\Here.xls")
'Open the 1st sheet of source file
Set srcWorksheet = srcWorkBook.Worksheets(1)
'Open the 1st sheet of destination file
Set destWorksheet = destWorkbook.Worksheets(1)
'copy all data
LastSrcRow = srcWorksheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastDestRow = destWorksheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Set srcRange = Range(srcWorksheet.Cells(2, 1), srcWorksheet.Cells(LastSrcRow, 2))
Set destRange = Range(destWorksheet.Cells(LastDestRow + 1, 1), destWorksheet.Cells(LastDestRow + LastSrcRow - 1, 2))
srcRange.Copy destRange
End Sub
-結束修訂-
這是對代碼的略微調整,放棄了循環/激活/選擇/復制/粘貼,轉而使用range.copy
:
'Copy "A" data
With srcWorksheet
LastSrcRow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
With destWorksheet
LastDestRow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
Set srcRange = Range(srcWorksheet.Cells(2, 1), srcWorksheet.Cells(LastSrcRow, 1))
Set destRange = Range(destWorksheet.Cells(LastDestRow + 1, 1), destWorksheet.Cells(LastDestRow + LastSrcRow - 1, 1))
srcRange.Copy destRange
'copy "B" data
With srcWorksheet
LastSrcRow = .Range("B" & .Rows.Count).End(xlUp).Row
End With
With destWorksheet
LastDestRow = .Range("B" & .Rows.Count).End(xlUp).Row
End With
Set srcRange = Range(srcWorksheet.Cells(2, 2), srcWorksheet.Cells(LastSrcRow, 2))
Set destRange = Range(destWorksheet.Cells(LastDestRow + 1, 2), destWorksheet.Cells(LastDestRow + LastSrcRow - 1, 2))
srcRange.Copy destRange
此外,如果您確定A和B列始終會填充到源文件中的同一行,則可以一次完成整個range.copy
:
'copy all data
LastSrcRow = srcWorksheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastDestRow = destWorksheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Set srcRange = Range(srcWorksheet.Cells(2, 1), srcWorksheet.Cells(LastSrcRow, 2))
Set destRange = Range(destWorksheet.Cells(LastDestRow + 1, 1), destWorksheet.Cells(LastDestRow + LastSrcRow - 1, 2))
srcRange.Copy destRange
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.