Как вставить специальное сохранение формата в новую книгу в VBA

Я хотел бы скопировать и вставить специальный (значения и формат) диапазон из книги 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?

XLBook.Worksheets("EXO").Range("P7:A24").PasteSpecial xlPasteValuesXLBook.Worksheets("EXO").Range("P7:A24").PasteSpecial xlPasteFormats
Damian 27.05.2019 12:20

Не используйте .Activate и ActiveSheet. Вместо этого работайте с таблицей напрямую Worksheets("Pivot EXO").PivotTables… • Возможно, вам будет полезно прочитать Как избежать использования Select в Excel VBA. • Также всегда указывайте лист для всех диапазонов Range("P7:A24").Copy, иначе вы позволите Excel угадать, какой лист взять. Укажите как Worksheets("Pivot EXO").Range("P7:A24").Copy

Pᴇʜ 27.05.2019 12:52

@ Дэмиан, я пытался, но это не работает. Я думаю, что проблема связана с тем, что я копирую/вставляю значения сводной точки, или, может быть, с тем, что я использую Excel.Application.Workbooks.Add, и поэтому я не использую «открыть».

Hippolyte BRINGER 27.05.2019 14:08
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
3
1 266
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ну, в основном значения в сводном диапазоне, который вы копируете, вообще не отформатированы, это только стиль сводной таблицы, который показывает их отформатированными.

Одним из обходных путей было бы скопировать ваши значения, затем преобразовать скопированные значения в таблицу и применить то же форматирование, что и ваша сводная таблица (дополнительные сведения см. В комментариях):

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 специальной пастой работает отлично!

Hippolyte BRINGER 27.05.2019 17:11
Ответ принят как подходящий

Я решил свою проблему.

Проблема заключалась в том, что я создаю новый файл 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

Другие вопросы по теме