You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA双工作簿切换遍历工作表复制数据问题求助

VBA跨工作簿拷贝工作表修正方案

修正后完整代码

Sub Test1()
  Dim WshtNames As Variant
  Dim WshtNameCrnt As Variant
  Dim WB1 As Workbook
  Dim WB2 As Workbook
  ' 显式绑定运行宏的ORG文件
  Set WB1 = ThisWorkbook
  ' 打开存放数据的NOT_ORG文件
  Set WB2 = Workbooks.Open("C:\NOT_ORG.xlsx")
  ' 指定需要匹配的工作表名数组
  WshtNames = Array("2", "3")
  
  For Each WshtNameCrnt In WshtNames
    ' 判断WB2中是否存在对应工作表,避免不存在时报错
    Dim wsExists As Boolean
    wsExists = False
    On Error Resume Next
    wsExists = Not WB2.Worksheets(WshtNameCrnt) Is Nothing
    On Error GoTo 0
    
    If wsExists Then
      ' 复制WB2对应工作表的内容,当前为复制A1单元格,可按需调整范围
      WB2.Worksheets(WshtNameCrnt).Range("A1").Copy
      ' 在WB1中新建带_new后缀的工作表
      Dim newWs As Worksheet
      Set newWs = WB1.Sheets.Add
      newWs.Name = WshtNameCrnt & "_new"
      ' 粘贴内容到新表
      newWs.Range("A1").PasteSpecial Paste:=xlPasteAll
      ' 清空剪贴板
      Application.CutCopyMode = False
    End If
  Next WshtNameCrnt
  ' 可选:处理完成后自动关闭NOT_ORG文件,不保存修改
  ' WB2.Close SaveChanges:=False
End Sub

核心调整说明

  • 用ThisWorkbook替代ActiveWorkbook绑定运行宏的ORG文件,避免文件切换时绑定对象偏移出错
  • 所有工作表、单元格操作都显式指定所属工作簿,不会出现默认引用当前激活文件的逻辑混乱
  • 新增工作表存在性校验逻辑,避免数组中指定的工作表名在NOT_ORG文件不存在时触发运行时错误
  • 去掉了冗余的Activate、Select操作,VBA操作单元格无需选中对象,显式引用即可,运行效率更高、稳定性更强

如果需要复制整张工作表的全部内容而非仅A1单元格,可将复制行替换为WB2.Worksheets(WshtNameCrnt).UsedRange.Copy,仅拷贝有数据的区域,运行效率更高


内容的提问来源于stack exchange,提问作者eM_Sk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:09:02