【问题标题】:VBA: Copy paste range across workbooks object-defined errorVBA:跨工作簿对象定义错误复制粘贴范围
【发布时间】:2017-09-29 22:06:55
【问题描述】:

我无法跨工作簿复制范围。有与此相关的类似帖子 (VBA copy-paste offset to another workbook),但似乎都没有帮助解决应用程序定义或对象定义的错误。

我试过了

       Set wbSource = Workbooks("Source.xlsx")
       Set wbTarget = Workbooks("Target.xlsx")
       Set wbSource_WS = wbSource.Worksheets("Source")
       Set wbSTarget_WS = wbTarget.Worksheets("Target")

       wbSource_WS.Activate
       wbSource_WS.Range(Cells(Row_SourceStart, Col_Source), Cells(Row_SourceEnd, Col_Source)).Copy
       wbTarget_WS.Activate
       wbSTarget_WS.Range(Cells(Row_TargetStart, Col_TargetStart), Cells(Row_TargetStart, Col_TargetEnd)).PasteSpecial Paste:=xlPasteValues

还有这个:

       wbSource_WS.Range(Cells(Row_SourceStart, Col_Source), Cells(Row_SourceEnd, Col_Source)).Copy Destination:= _
       wbSTarget_WS.Range(Cells(Row_TargetStart, Col_TargetStart), Cells(Row_TargetStart, Col_TargetEnd)).PasteSpecial(Paste:=xlPasteValues, Transpose:=True)

【问题讨论】:

  • 试试这个...wbSTarget_WS.Range(Cells(Row_TargetStart, Col_TargetStart)).PasteSpecial(Paste:=xlPasteValues, Transpose:=True)
  • 可能存在源和目标范围大小不匹配的错误...
  • 我调试了我的代码。源范围和目标范围相同。

标签: vba excel


【解决方案1】:

您需要完全声明范围内的对象:

 wbSource_WS.Activate
 wbSource_WS.Range(Cells(Row_SourceStart, Col_Source), Cells(Row_SourceEnd, Col_Source)).Copy

应该是这样的:

 wbSource_WS.Activate
 wbSource_WS.Range(wbSource_WS.Cells(Row_SourceStart, Col_Source), wbSource_WS.Cells(Row_SourceEnd, Col_Source)).Copy

.range 中的每个 .cell 都需要绑定到:wbSource_WS

使用 With 语句会更简单/更简洁:

With wbSource_WS
    .Range( .Cells(Row_SourceStart, Col_Source), .Cells(Row_SourceEnd, Col_Source)).Copy
End With

【讨论】:

  • 您可以对所有实例执行此操作;只是以第一个实例为例。
  • 这可以清除“对象定义的错误”,但现在出现了一个新错误“无法获取范围类的 pastespecial 属性”,我现在正在尝试修复
  • @diana 您是否尝试过粘贴到没有 .pastespecial 的范围以查看它是否有效?对于完全定义的范围,您可能只想选择要粘贴的所需范围的左上角单元格。
【解决方案2】:

你的代码有错别字。

Set wbSource = Workbooks("Source.xlsx")
   Set wbTarget = Workbooks("Target.xlsx")
   Set wbSource_WS = wbSource.Worksheets("Source")
   Set wbSTarget_WS = wbTarget.Worksheets("Target")

   wbSource_WS.Activate
   wbSource_WS.Range(Cells(Row_SourceStart, Col_Source), Cells(Row_SourceEnd, Col_Source)).Copy
   **wbSTarget_WS.Activate**
   wbSTarget_WS.Range(Cells(Row_TargetStart, Col_TargetStart), Cells(Row_TargetStart, Col_TargetEnd)).PasteSpecial Paste:=xlPasteValues

我用这个小改动运行它,它没有产生任何错误。

我建议您使用 Option Explicit。它将防止此错误再次发生。 Excel 会在让您运行 VBA 程序之前指出存在未声明的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多