在尝试复制和粘贴时,我不断收到1004错误应用程序定义或对象定义错误

时间:2017-06-26 18:36:32

标签: excel vba runtime-error copy-paste

我正在尝试将范围A:3复制到A:x(其中x是表“AgentName”中的行数)来自工作表“AgentName” 但是,每当我尝试使用变量复制范围时,它就会给出错误1004。 我已经阅读了我能找到的所有内容。这是我尝试过的两个常见的。

Worksheets("AgentName").Range("A3:A"&x).copy

Worksheets("AgentName").Range(Sheets("AgentName").Cells(3, 1), Sheets("AgentName").Cells(x, 1)).Copy

^我已经尝试过没有Sheets,只有细胞,细胞和范围在一起。

以下是代码的缩写版本:

Private Sub CommandButton1_Click()

    'CountRows in AgentName Table
    Dim myWorkSheet As Worksheet, myTable As ListObject, x As Long
    Set myWorkSheet = ActiveWorkbook.Worksheets("AgentName")
    Set myTable = myWorkSheet.ListObjects("AgentName")
    x = myTable.DataBodyRange.Rows.Count

    'Specific Forms for All Agents (Motivated)
    If Range("B3").Value = "All Agents" And Range("C3").Value = "Motivated" Then
        Worksheets("Other Forms").Range("A1:H2").Copy
        Worksheets("Master").Range("B6:I7").PasteSpecial
        Worksheets("AgentName").Range(Sheets("AgentName").Cells(3, 1), Sheets("AgentName").Cells(x, 1)).Copy
        Worksheets("Master").Range("B8:B13").PasteSpecial
        Range("B6:I13").Borders.LineStyle = xlContinuous

    End If
End Sub

1 个答案:

答案 0 :(得分:0)

我看到两个潜在的错误来源: 首先,将具有非常量大小的范围复制并粘贴到具有恒定大小的范围中,即:

Worksheets("AgentName").Range(Sheets("AgentName").Cells(3, 1), Sheets("AgentName").Cells(x, 1)).Copy
    Worksheets("Master").Range("B8:B13").PasteSpecial

你将A3:Ax粘贴到B8:B13,如果x不等于8,这将给你一个错误,所以只需将它粘贴到第一个单元格中,excel将假设你想要粘贴下面的其余部分。所以:

    Worksheets("Master").Range("B8").PasteSpecial

代替。

第二点是你的复制结构:

Worksheets("AgentName").Range(Sheets("AgentName").Cells(3, 1), Sheets("AgentName").Cells(x, 1)).Copy

如果你已经定义了一个,我宁愿使用listobject。

mytable.databodyrange(1,mytable.listrows.count).copy

这个或类似的东西应该有效。请注意.row为您提供绝对行,而listrow将为您提供相对于表的行。所以mytable.databodyrange(1,3)将是表格的第一行和第三列中的条目,无论表格是什么。这可能是绝对行9053和绝对列456.通常最好使用这样的相对坐标,你可以再次使用代码用于其他目的,你只需要调整表格。

祝你好运,我希望这有帮助!