Я пытаюсь создать простую вспомогательную функцию для копирования и вставки произвольного числа строк в заданную таблицу.
Public Sub insertRows(tgtWorksheet As String, R As Integer, NumRows As Integer)
'Statements added for error checking'
Debug.Print ("Inserting " & NumRows & " rows in '" & tgtWorksheet & "' by copying row " & insertRow)
copyRng = Worksheets(tgtWorksheet).Rows(insertRow).EntireRow
pasteRng = Range(Worksheets(tgtWorksheet).Cells(insertRow, 1), Worksheets(tgtWorksheet).Cells(insertRow + NumRows - 1, 1)).EntireRow
'End statements added for error checking'
Worksheets(tgtWorksheet).Rows(insertRow).EntireRow.Copy
Range(Worksheets(tgtWorksheet).Cells(insertRow, 1), Worksheets(tgtWorksheet).Cells(insertRow + NumRows - 1, 1)).EntireRow.Insert Shift:=xlDown
End Sub
Эта функция поддерживает функцию базы данных для чтения и записи записей, размещенных извне, вРабочий лист.Каждая строка в таблице Excel содержит смесь необработанных входных ячеек и формул.В базе данных хранятся только необработанные входные ячейки, поэтому при загрузке данных из базы данных я идентифицирую первую пустую строку и использую ее для создания необходимого количества строк шаблона для хранения новых данных.
Проблема заключается в том, что, после того, как я успешно запустил это, а затем я удаляю строки из целевой таблицы, которые имеют тот же номер строки, что и цель для моей вставки, при попытке запустить функцию снова я получаю Run-time error '-2147417848 (80010108) Method 'Insert of object 'Range' failed
Когда я опрашиваю два диапазона ActiveWorkbook.Worksheets(tgtWorksheet).Rows(R).EntireRow
и Range(ActiveWorkbook.Worksheets(tgtWorksheet).Cells(R, 1),ActiveWorkbook.Worksheets(tgtWorksheet).Cells(R + NumRows - 1, 1)).EntireRow
, они выглядят одинаково в тех случаях, когда происходит сбой макроса, а также при успешном выполнении.
Я не использую фильтры или сводные таблицыв моем tgtWorksheet.Каким-то образом это действие удаления сбивает с толку макрос.
Как я могу устранить эту проблему?
Редактировать - Подробное отслеживание ошибок
Некоторая дополнительная информация здесь:
Вызывающая функция загрузки базы данных вызывает insertRows со строкой:
Call insertRows(tgtWorksheet, insertRow, NumRows)
Сначала я открываю рабочую книгу и вызываю функцию для загрузки одной записи данных.Функция работает без ошибок.Если я сделаю паузу непосредственно перед строкой копирования, я получу следующее изображение в моих ближайших / локальных файлах:

Я могу запустить это произвольное количество раз сдругие параметры, добавление разных данных и разного количества строк успешно.
В какой-то момент мне вставили достаточно данных, чтобы моей первой пустой строкой была строка 50. Если я перейду к таблице tgtworksheet и удалю строку 50, а затемзапустите его снова, я получаю сообщение об ошибке.(Обратите внимание, что в этом случае строка 51 является элементом за элементом точно так же, как строка 50. Она также элементом за элементом точно такая же строка, что и строка 44 в начальном прогоне выше. У меня есть некоторое неизвестное количество пустых строк шаблона внизумоих данных, и я использую функцию insertRows, чтобы удостовериться, что достаточно строк-разделителей).

Окно немедленного / локального просмотра выглядит точно так жездесь, несмотря на получение ошибки вставки.
