Я хотел бы скопировать и вставить специальный (значения и формат) диапазон из книги A в книгу B. Проблема в том, что значения вставляются, но не в формате
Я пробовал все PasteSpecial, но ничего не помогло...
Sub Macro_copy_paste_pivot()
Dim date_report As String
Dim appExcel As Excel.Application
Dim XLBook As Workbook
Set appExcel = CreateObject("Excel.Application")
Set XLBook = appExcel.Workbooks.Add
date_report = WorksheetFunction.WorkDay(Date, -1)
date_report = Format(date_report, "yyyy-mm-dd")
' COPY and PASTE the pivot EXO
Worksheets("Pivot EXO").Activate
ActiveSheet.PivotTables("Pivot EXO").PivotFields( _
"[Context].[AsOfDate].[AsOfDate]").VisibleItemsList = Array( _
"[Context].[AsOfDate].&[" & date_report & "T00:00:00]")
Range("P7:A24").Copy
XLBook.Sheets.Add.Name = "EXO"
XLBook.Worksheets("EXO").Range("P7:A24").PasteSpecial Paste:=xlPasteFormats
End Sub
Итак, как мне вставить формат из книги A в книгу B?
Не используйте .Activate
и ActiveSheet
. Вместо этого работайте с таблицей напрямую Worksheets("Pivot EXO").PivotTables…
• Возможно, вам будет полезно прочитать Как избежать использования Select в Excel VBA. • Также всегда указывайте лист для всех диапазонов Range("P7:A24").Copy
, иначе вы позволите Excel угадать, какой лист взять. Укажите как Worksheets("Pivot EXO").Range("P7:A24").Copy
@ Дэмиан, я пытался, но это не работает. Я думаю, что проблема связана с тем, что я копирую/вставляю значения сводной точки, или, может быть, с тем, что я использую Excel.Application.Workbooks.Add, и поэтому я не использую «открыть».
Ну, в основном значения в сводном диапазоне, который вы копируете, вообще не отформатированы, это только стиль сводной таблицы, который показывает их отформатированными.
Одним из обходных путей было бы скопировать ваши значения, затем преобразовать скопированные значения в таблицу и применить то же форматирование, что и ваша сводная таблица (дополнительные сведения см. В комментариях):
Sub Macro_copy_paste_pivot()
Dim date_report As String
Dim appExcel As Excel.Application
Dim XLBook As Workbook, XLBookSource As Workbook 'Declare your source workbook too
Set appExcel = CreateObject("Excel.Application")
Set XLBookSource = ThisWorkbook 'Set the source workbook.. alternatively use ActiveWorkbook or specific book
Set XLBook = appExcel.Workbooks.Add
date_report = WorksheetFunction.WorkDay(Date, -1)
date_report = Format(date_report, "yyyy-mm-dd")
' COPY and PASTE the pivot EXO
XLBookSource.Worksheets("Pivot EXO").PivotTables("Pivot EXO").PivotFields( _
"[Context].[AsOfDate].[AsOfDate]").VisibleItemsList = Array( _
"[Context].[AsOfDate].&[" & date_report & "T00:00:00]")
Range("P7:A24").Copy
XLBook.Sheets.Add.Name = "EXO"
With XLBook.Worksheets("EXO")
.Range("P7:A24").PasteSpecial Paste:=xlPasteValues
.ListObjects.Add(xlSrcRange, .Range("P7:A24"), , xlYes).Name = "TableNameWhatever" 'Add a table for this range.. note this adds headers as well, review as needed
.ListObjects("TableNameWhatever").TableStyle = XLBookSource.Worksheets("Pivot EXO").PivotTables("PivotTable1").TableStyle2 'Give the same style as the pivot table
End With
End Sub
Спасибо за ваш ответ. Но когда форматируется стиль сводки, форматируются все случаи. Я решил свою проблему, проблема заключалась в том, что я создал новое «Excel.Application». С Set XLBook = Workbooks.Add
специальной пастой работает отлично!
Я решил свою проблему.
Проблема заключалась в том, что я создаю новый файл Excel.Приложение. С приведенным ниже кодом моя специальная вставка работает нормально.
Но я не понимаю, почему кслпастеформатс не работает, когда вы вставляете другой Excel.Приложение...
Sub Macro_copy_paste_pivot()
Application.ScreenUpdating = False
Dim date_report As String
Dim XLBook As Workbook
Dim wb As Workbook: Set wb = ThisWorkbook
Set XLBook = Workbooks.Add
date_report = WorksheetFunction.WorkDay(Date, -1)
date_report = Format(date_report, "yyyy-mm-dd")
' COPY and PASTE the pivot EXO
wb.Worksheets("Pivot EXO").PivotTables("Pivot EXO").PivotFields( _
"[Context].[AsOfDate].[AsOfDate]").VisibleItemsList = Array( _
"[Context].[AsOfDate].&[" & date_report & "T00:00:00]")
wb.Worksheets("Pivot EXO").Range(wb.Worksheets("Pivot EXO").Range("P7"), wb.Worksheets("Pivot EXO").Cells(Rows.count, 1).End(xlUp)).Copy
XLBook.Sheets.Add.Name = "EXO"
XLBook.Worksheets("EXO").Range("A1").PasteSpecial xlPasteValues
XLBook.Worksheets("EXO").Range("A1").PasteSpecial xlPasteFormats
' Save and update the screen
XLBook.SaveAs ("F:\path\Pivot_GOP_SCN_PAIR " & date_report & ".xlsx")
XLBook.Close SaveChanges:=True
Application.ScreenUpdating = True
End Sub
XLBook.Worksheets("EXO").Range("P7:A24").PasteSpecial xlPasteValues
XLBook.Worksheets("EXO").Range("P7:A24").PasteSpecial xlPasteFormats