繁体   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