Есть несколько причин, по которым Range.Insert
может потерпеть неудачу, в зависимости от того, что находится на этом листе ... и невозможно понять почему, просто взглянув на этот фрагмент.
Нет никаких причин хотетьчтобы избежать объявления и использования переменных, хотя.Предполагая, что лист, который активен при запуске макроса (при условии, что Sub ...
не слишком далеко над началом этого фрагмента), является пункт назначения лист ...
Dim destSheet As Worksheet
Set destSheet = ActiveSheet
Debug.Assert destSheet.Index > 1 ' if code breaks here, assumption was wrong
Dim sourceSheet As Worksheet
Set sourceSheet = destSheet.Previous
Dim sourceStart As Range
Set sourceStart = sourceSheet.Range("A2:K2")
sourceSheet.Range(sourceStart, sourceStart.End(xlDown)).Copy
destSheet.Range("A2:K2").Insert Shift:=xlDown
Есливышеприведенный код аналогичным образом завершается сбоем, тогда я бы предложил попытаться сделать ту же самую вещь вручную и посмотреть, дает ли Excel более подробное сообщение об ошибке, как это часто бывает, когда весь его API сообщает VBA «1004, ошибка, определяемая приложением».
Обратите внимание, что Range.End(xlDown)
имеет ненулевой шанс не посадить вас там, где вы думаете, что он делает.Поиск последнего ряда обычно более надежен, если перейти к нему снизу листа с помощью Range.End(xlUp)
:
sourceSheet.Range(sourceStart, sourceSheet.Range("A" & Rows.Count & ":K" & Rows.Count).End(xlUp)).Copy
Если на листе назначения есть ListObject
, убедитесь, что вы не вставляете большестолбцы, чем таблица - если вы делаете это вручную, вы получите следующее сообщение:

Если вы делаете это программно, это все, что вы получите:
