Я продолжаю получать сообщение об ошибке 1004 Application-Defined-определенные или Object-Defined Error при попытке скопировать и вставить

Я пытаюсь скопировать диапазон 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

^ Я пробовал это без листов, только с клетками, с клетками и диапазоном вместе.

Вот сокращенная версия кода:

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 ответ

Я вижу два потенциальных источника ошибки: сначала вы копируете и вставляете диапазон с непостоянным размером в диапазон с постоянным размером, а именно здесь:

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

Вы вставляете A3:Axe в B8:B13, если x не равно 8, это даст вам ошибку, поэтому просто вставьте ее в первую ячейку, и Excel будет считать, что вы захотите вставить остальные чуть ниже. Так:

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

вместо.

Второй момент - ваша конструкция копирования:

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

Я бы предпочел работать с объектом списка, если он у вас уже есть.

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

Это или что-то очень похожее должно работать. Помните, что.row дает вам абсолютную строку, а listrow - строку относительно таблицы. Так mytable.databodyrange(1,3) будет запись в первой строке и третьем столбце таблицы, независимо от того, где таблица. Это может быть абсолютная строка 9053 и абсолютный столбец 456. Обычно лучше работать с относительными координатами, как это, вы сможете снова использовать код для других целей, и вам просто нужно настроить таблицу.

Удачи, надеюсь, это помогло!

Другие вопросы по тегам