簡體   English   中英

VBscript:將數據從一個工作簿復制/粘貼到另一工作簿的下一個空白行(特定單元格)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM