Параметр «Режим» для PivotTable.PivotSelect
должен быть xlLabelOnly
, а не «xlLabel» (см. здесь ).
Ваш расчет последней использованной строки ("LR") должен выполняться на листе destination - и непосредственно перед каждой операцией вставки .
Пожалуйста, попробуйте сначала:
Sub Macro2()
Dim i As Integer
Dim LR As Integer
Sheets("pivot").Activate
For i = 1 To 4
Sheets("pivot").PivotTables("PivotTable" & i).PivotSelect "", xlLabelOnly, True
Selection.Copy
With Sheets("RSL to Review")
LR = .Cells(.Rows.Count, "B").End(xlUp).Row
.Cells(LR + 2, "B").PasteSpecial Paste:=xlPasteAll
End With
Next i
End Sub
Вы можете изменить Range.PasteSpecial
параметр Вставить на xlPasteValuesAndNumberFormats
или что угодно. Если вы вставите xlPasteAll
или xlPasteAllUsingSourceTheme
, у вас также будут сводные таблицы в месте назначения (и ошибка, если они будут перекрывать друг друга).
Когда вы работаете с PivotSelect
для копирования выбранного диапазона , этот лист должен быть активным (активированным) раньше. Поскольку все пытаются избегать выбора или активации чего-либо , есть лучшее решение.
Вы можете скопировать RowFields().LabelRange
или RowFields().DataRange
(или оба Union
), не выбирая и не активируя ничего:
Sub CopyPivotRowlabels()
Dim i As Long
Dim LR As Long
For i = 1 To 4
With Sheets("pivot").PivotTables(i).RowFields(1)
.DataRange.Copy
'Union(.LabelRange, .DataRange).Copy
End With
With ActiveWorkbook.Sheets("RSL to Review")
LR = .Cells(.Rows.Count, "B").End(xlUp).Row
.Cells(LR + 2, "B").PasteSpecial Paste:=xlPasteAllUsingSourceTheme
End With
Next i
End Sub