【问题标题】:VBscript: Copy/Paste data from one workbook to next blank row (specific cells) of another workbookVBscript:将数据从一个工作簿复制/粘贴到另一个工作簿的下一个空白行(特定单元格)
【发布时间】:2014-04-07 13:42:19
【问题描述】:

我只是 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------PasteA1 ---------PasteC2

5------PasteA2 ---------PasteC3

6------PasteA2 ---------

7

我希望它是:

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

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

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

3--------aaa2 ------------(空白)

4--------PasteA1 --------PasteC1

5--------PasteA2 --------PasteC2

6--------PasteA2 --------PasteC3

7

它正确地粘贴了范围 A 中的数据,但是从“B”数据中,代码将数据粘贴到下一行与“A”数据相比,而不是粘贴到“A”数据旁边的单元格。我希望将代码正确粘贴到单元格中。我考虑过“IF”或“FOR”语句,但对此我没有任何想法。

这是我编辑的代码和丹的回答,但问题仍然存在:

'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 中录制宏来执行此操作?这可能是一个很好的起点。然后你可以对它生成的代码做一些小的改动,让它通过 VBScript 工作。
  • 亲爱的 Bond,我已经尝试了记录的方法,但是此方法无法检测并生成“下一个空白行”的代码。我现在找不到我的问题的任何解决方案。我按照丹的回答更新了代码,但问题仍然存在
  • @Skyoffeedom 您可以添加自己的 sn-p 以查找下一个空白行。 This 帖子可能对您有所帮助。

标签: excel vbscript vba


【解决方案1】:

当您运行以下代码时,您是否仍然会出现交错的 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

【讨论】:

  • 感谢您的快速回答,我会尝试的。
  • 以上内容应该可以解决问题,并在 Excel 中按预期运行——期待您的结果@user3506810!
  • 亲爱的@Dan Wagner,我在运行您的脚本时遇到了问题。你能用我上面的答案(和问题)给出你的想法吗?
  • 运行最新版本时会发生什么(在我的答案顶部)?
  • 我在下面的答案中添加了我的问题。结果不符合我的预期。我稍微编辑了代码,问题仍然没有解决。请在本主题下面的答案中找到我编辑的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多