【问题标题】:Paste sheet copied from an open workbook into an existing non open workbook将从打开的工作簿复制的工作表粘贴到现有的非打开工作簿中
【发布时间】:2026-02-23 19:00:01
【问题描述】:

我正在尝试从我打开的工作簿中复制“Sheet1”,标记为“source.xlsm”,然后粘贴到我现有工作簿的最后一张表之后,该工作簿在运行时未打开,标记为“target.xlsx” ”。

我有下面的代码,似乎整个“C:\”目录什么都不做。甚至可以放入目录吗?如果不打开 Target.xlsx,我找不到执行此操作的方法。

ActiveSheet.Select
ActiveSheet.Copy After:=Workbooks("C:\Target.xlsx").Sheets("FirstSheet")

【问题讨论】:

  • 目前我的下标超出了“C:\Target.xlsx”的范围,我无法找到定位该文件的方法。
  • 在复制工作表之前,您需要先打开目标工作簿。
  • 有没有办法在不打开目标工作簿的情况下做到这一点?
  • 不,没有。您可以在代码中打开它,然后在复制后将其关闭。
  • 谢谢蒂姆,这是我完成宏所需的信息

标签: vba excel copy


【解决方案1】:

您已经想通了,但建议进行修改:

Dim wb As WorkBook
''Open 2nd Workbook
Set wb = Workbooks.Open(Filename:="C:\Archive.xlsx")

''Copy To Different Workbook
Workbooks("Source.xlsx").Sheets("Source").Copy _
         After:=wb.Sheets("Archive")

''Close 2nd Workbook
wb.Save
wb.Close

【讨论】:

  • 谢谢,这让我了解了如何缩短和整理我的宏,因为我还在学习。没有你之前的评论,我仍然在搞这个,所以我会给你答案。
【解决方案2】:

使用 Tim 提供的有用信息回答了我自己的问题。

''Open 2nd Workbook
Workbooks.Open Filename:="C:\Archive.xlsx"

''Copy To Different Workbook
Workbooks("Source.xlsx").Sheets("Source").Activate
ActiveSheet.Copy After:=Workbooks("Archive.xlsx").Sheets("Archive")

''Close 2nd Workbook
Workbooks("Archive.xlsx").Sheets("Archive").Activate
ActiveWorkbook.Save
ActiveWorkbook.Close

【讨论】:

  • 您应该能够通过将Workbooks("Source.xlsx").Sheets("Source").Activate ActiveSheet.Copy After:=Workbooks("Archive.xlsx").Sheets("Archive") 组合为Workbooks("Source.xlsx").Sheets("Source").Copy After:=Workbooks("Archive.xlsx").Sheets("Archive") 来避免使用Activate。 (我假设第二个Activate 是为了确保存档与“存档”表一起保存,而不是“源”表作为活动表,但如果不是,您也可以摆脱它。)
  • 忽略我的评论 - 蒂姆的回答包含了它(并且更好)