Цель состоит в том, чтобы скопировать диапазон данных в существующую таблицу, где таблица сначала удаляет старые данные.У меня есть дополнительный код, но это часть кода, которая обрабатывает данные таблицы.Важное примечание: копируемый диапазон НЕ содержит объединенные ячейки.Я проверил и дважды проверил.Однако непосредственно под таблицей, в которую я вставляю, есть объединенные ячейки, если это имеет значение.
Sub updateData()
Dim ws as worksheet, Tws as worksheet
Dim tbl as listobject
Set ws = thisworkbook.worksheets(1)
Set Tws = thisworkbook.Sheets(2)
Set tbl = Ws.ListObjects(1)
With tbl ' Deleting data from current table in the worksheet
If Not .DataBodyRange Is Nothing Then
.DataBodyRange.Delete
End If
.ListRows.Add
End With
fr = WorksheetFunction.Match("LookUpValue", Ws.Columns(1), 0) - 3 ' First row
fc = 1 ' First column
lc = Tws.Cells(fr, fc).End(xlToRight).Column ' Last column
lr = Tws.Cells(fr, fc).End(xlDown).Row - 3 ' Last row
Set NewData = Tws.Range(Tws.Cells(fr, fc), Tws.Cells(lr, lc))
NewData.Copy tbl.DataBodyRange(1, 1) ' WORKING CODE (overwrites merged cells)
Application.CutCopyMode = False
End sub
РЕДАКТИРОВАТЬ: просто чтобы уточнить полученную ошибку, ошибка времени выполнения '1004': сделатьпри этом все объединенные ячейки должны быть одинакового размера
2-е РЕДАКТИРОВАНИЕ: Благодаря @siddarth routh у меня есть рабочий код.Лично вместо NewData.Copy tbl.DataBodyRange(1, 1)
, который отлично подходит для перезаписи объединенных ячеек, я решил разомкнуть ячейки ниже, чтобы вставить строки между ними и использовать строки
NewData.Copy
tbl.DataBodyRange(1, 1).PasteSpecial
, чтобы продолжить форматирование и не перезаписывать мои ячейки.