Excel VBscript:将数据从一个工作簿复制/粘贴到另一个工作簿的下一个空行(特定单元格)

Excel VBscript:将数据从一个工作簿复制/粘贴到另一个工作簿的下一个空行(特定单元格),excel,vbscript,vba,Excel,Vbscript,Vba,我只是VBscript(和代码)的新手。使用“Excel宏-VBA”尝试将数据从一个工作簿复制/粘贴到另一个工作簿的下一个空白行时出现问题 例如:我想将工作簿1的A2到A4(或更多)范围复制到工作簿2的A4(空行)。复制范围从工作簿1的C2到C4(或更多)粘贴到工作簿2的E4(空行)。我正在使用“Do..Loop”方法 以下是我在执行新的应答代码后遇到的问题: ----------A---------E 1------标题------标题 2-----(空白)------bbb1 3------

我只是VBscript(和代码)的新手。使用“Excel宏-VBA”尝试将数据从一个工作簿复制/粘贴到另一个工作簿的下一个空白行时出现问题

例如:我想将工作簿1的A2到A4(或更多)范围复制到工作簿2的A4(空行)。复制范围从工作簿1的C2到C4(或更多)粘贴到工作簿2的E4(空行)。我正在使用“Do..Loop”方法

以下是我在执行新的应答代码后遇到的问题:

----------A---------E

1------标题------标题

2-----(空白)------bbb1


3------aaa2-----------------粘贴c1运行以下代码时,是否仍会得到交错的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
--结束修订--

这里对您的代码做了一点小小的调整,放弃了循环/激活/选择/复制/粘贴,转而使用
范围。复制

'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列将始终填充到源文件中的同一行,则可以完成整个
范围。一次复制

'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

您是否尝试过在Excel中录制宏来执行此操作?这是一个很好的起点。然后,您可以对它生成的代码进行一些小更改,使其通过VBScript工作。亲爱的Bond,我已经尝试了录制的方法,但该方法无法检测并生成“下一个空行”的代码。我现在找不到任何解决问题的办法。我按照丹的答案更新了代码,但问题仍然存在exist@Skyoffeedom您可以添加自己的代码段以查找下一个空行。这篇文章可能会对你有所帮助。谢谢你的快速回答,我会尝试一下。上面的内容应该能达到预期效果,并在Excel中正常运行——期待你的结果@user3506810!亲爱的@Dan Wagner,我在运行您的脚本时遇到问题。你能用上面我的答案(和问题)给出你的想法吗?当你运行最新版本(在我答案的顶部)时会发生什么?我在下面的答案中添加了我的问题。结果不符合我的期望。我编辑了一点代码,问题仍然没有解决。请在本主题下面的答案中找到我编辑的代码。
'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