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

Excel 在尝试复制和粘贴时,我不断收到应用程序定义的1004错误或对象定义的错误,excel,vba,runtime-error,copy-paste,Excel,Vba,Runtime Error,Copy Paste,我正在尝试将范围A:3从工作表“AgentName”复制到A:x(其中x是表“AgentName”中的行数) 但是,每当我尝试复制包含变量的范围时,它都会给出错误1004。 我已经通读了我能找到的一切。我试过两种常见的方法 Worksheets("AgentName").Range("A3:A"&x).copy Worksheets("AgentName").Range(Sheets("AgentName").Cells(3, 1), Sheets("AgentName").Cells

我正在尝试将范围A:3从工作表“AgentName”复制到A:x(其中x是表“AgentName”中的行数) 但是,每当我尝试复制包含变量的范围时,它都会给出错误1004。 我已经通读了我能找到的一切。我试过两种常见的方法

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

Worksheets("AgentName").Range(Sheets("AgentName").Cells(3, 1), Sheets("AgentName").Cells(x, 1)).Copy
^我试过不使用床单,只使用单元格,单元格和范围放在一起

以下是代码的简化版本:

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

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

Worksheets("AgentName").Range(Sheets("AgentName").Cells(3, 1), Sheets("AgentName").Cells(x, 1)).Copy
    Worksheets("Master").Range("B8:B13").PasteSpecial
如果x不等于8,则将A3:Ax粘贴到B8:B13中,这将给您一个错误,因此只需将其粘贴到第一个单元格中,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。通常,使用这样的相对坐标会更好,因为您可以再次将代码用于其他目的,只需调整表即可

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

复制或粘贴哪个操作导致错误?