使用VBA粘贴时如何修复运行时错误1004

时间:2019-07-10 05:59:18

标签: excel vba

我对VBA还是很陌生,所以这可能有点基础。我有一个宏,可从工作表“工作表”中复制一定范围的单元格,并将其粘贴到工作表“ FCTC”中的活动行中。宏还会插入新行,因此新粘贴的信息不会覆盖任何现有数据。我认为我的问题是将范围复制到活动单元格参考粘贴,但是我不确定。我已经在下面发布了代码。任何帮助将不胜感激。

`Private Sub CommandButton1_Click()
Application.Goto ActiveWorkbook.Sheets("Working Sheet").Range("A1:AQ7")
    Selection.Copy
    Sheets("FCTC").Select
    ActiveCell.Offset(0, 7).EntireRow.Insert
    ActiveCell.Paste
End Sub

宏实际上可以工作并插入所需的数据,并根据需要向下移动行。但是我得到了

  

运行时错误1004“ Range类的PasteSpecial方法失败”

结构显然有问题,但我无法解决。

Before I run the Macro

After the macro with the new error message

1 个答案:

答案 0 :(得分:0)

  1. 请勿使用.Select.ActivateHow to avoid using Select in Excel VBA)。
  2. 为红格命名,例如PasteBeforeHere。因此,用户无需手动选择此单元格。如果您使用命名范围,则可以通过Range("PasteBeforeHere")轻松访问单元格。
  3. 然后在复制/粘贴之前先插入空行。

类似以下的方法应该起作用:

Option Explicit

Private Sub CommandButton1_Click()
    Dim Source As Range
    Set Source = ThisWorkbook.Worksheets("Working Sheet").Range("A1:AQ7")

    Dim InsertBefore As Range
    Set InsertBefore = Selection 'better ThisWorkbook.Worksheets("FCTC").Range("PasteBeforeHere")
    Set InsertBefore = ThisWorkbook.Worksheets("FCTC").Range("PasteBeforeHere")

    'insert empty rows (same amount as source has)
    Application.CutCopyMode = False
    InsertBefore.Resize(RowSize:=Source.Rows.Count).EntireRow.Insert

    'copy from source to destination
    Source.Copy Destination:=InsertBefore.Offset(RowOffset:=-Source.Rows.Count)
End Sub