【问题标题】:Range and .End(xlDown).Offset(1,0) Run-time error '1004'范围和 .End(xlDown).Offset(1,0) 运行时错误 '1004'
【发布时间】:2020-12-16 18:09:35
【问题描述】:

我正在尝试从工作表 1 (A1:C1) 复制并在工作表 2 中粘贴一个带有 offset 和 xlDown 的特殊值,并将相应的结果放在 Range (B3:D3) 中。

表 1

第 4 页 -(必需输出)

我收到运行时错误“1004”应用程序定义或对象定义错误。

Sub test()

Workbooks("testing.xlsm").Activate
Sheet1.Select
Range("A1:C1").Copy

Sheet2.Select
Range("B3").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

Application.OnTime Now + TimeValue("00:00:10"), "test"
End Sub

【问题讨论】:

  • 如果你试图找到最后一个单元格,End(xlDown) 是不可靠的。见this approach

标签: excel vba copy-paste


【解决方案1】:

这应该可行:

Sub test()
Dim wsT As Worksheet
With Workbooks("testing.xlsm")
  Set wsT = .Sheets("Sheet2")
  wsT.Cells(wsT.Rows.Count, "B").End(xlUp).Offset(1, 0).Resize(1, 3).Value = _
    .Sheets("Sheet1").Range("A1:C1").Value
  Application.OnTime Now + TimeValue("00:00:10"), "test"
End With
End Sub

这是您代码的更高效版本。
但是,如果您希望保持自己的风格,这是效率较低的版本:

Sub test()

Workbooks("testing.xlsm").Activate
Sheet1.Select
Range("A1:C1").Copy

Sheet2.Select
Cells(Sheet2.Rows.Count, "B").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

Application.OnTime Now + TimeValue("00:00:10"), "test"
End Sub

【讨论】:

  • 附注:通常在 Excel/VBA 标签中回答avoid Select and Activate
  • 请不要在VBA中使用SelectActivate,见stackoverflow.com/questions/10714251/…
  • @FunThomas - 谢谢。我已经更新了答案,请删除您的反对票;)
  • @BigBen - 谢谢。我已经更新了答案,请删除您的反对票;)
  • 不是我的反对意见,但我认为你应该完全摆脱第二个 sn-p。实际上,如果这是答案,那么问题就是规范的如何找到我在问题评论中链接到的最后一行的副本。
猜你喜欢
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多