![](/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.