Я продолжаю получать сообщение об ошибке 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. Обычно лучше работать с относительными координатами, как это, вы сможете снова использовать код для других целей, и вам просто нужно настроить таблицу.
Удачи, надеюсь, это помогло!