Я разработал информационную панель, состоящую из нескольких различных сводных таблиц и сводных диаграмм.
Все эти сводные таблицы/диаграммы контролируются 1 слайсером под названием «Slicer_Store».
В этом слайсере есть около 800 различных магазинов на выбор.
Мне нужно сохранить PDF-файл с приборной панелью КАЖДОГО магазина. Процесс ручного выбора каждого элемента слайсера, а затем сохранения листа в виде файла PDF занимает очень много времени с более чем 800 хранилищами, поэтому я надеялся автоматизировать этот процесс с помощью VBA.
Вот мой код:
Public Sub myMacro()
Dim sI As SlicerItem, sI2 As SlicerItem, sC As SlicerCache
Set sC = ActiveWorkbook.SlicerCaches("Slicer_Store")
With sC
For Each sI In sC.SlicerItems
sC.ClearManualFilter
For Each sI2 In sC.SlicerItems
If sI.Name = sI2.Name Then sI2.Selected = True Else: sI2.Selected = False
Next
Debug.Print sI.Name
'add export to PDF code here
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\TestUser\Desktop\testfolder" & Range("b1").Text & ".pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Next
End With
End Sub
Код обрабатывает все элементы слайсера, но файл не сохраняется в формате pdf. Мне нужно, чтобы каждый файл сохранялся как значение в B2, поэтому это будет Store1.pdf, Store2.pdf, Store3.pdf и т. д.
Любая помощь будет очень признательна. Это большой рабочий проект, и многие люди зависят от этих pdf-файлов.
Отредактированный код:
Это должно работать, но для просмотра всех элементов слайсера (800+) требуется вечность. Кроме того, мне нужно убедиться, что он печатает только первую страницу (область печати), поэтому сам слайсер не будет напечатан.
Public Sub myMacro()
Dim sI As SlicerItem, sI2 As SlicerItem, sC As SlicerCache
Dim ws As Worksheet
Set sC = ActiveWorkbook.SlicerCaches("Slicer_Store_Number")
Set ws = Sheet18
With sC
For Each sI In sC.SlicerItems
sC.ClearManualFilter
For Each sI2 In sC.SlicerItems
If sI.Name = sI2.Name Then sI2.Selected = True Else: sI2.Selected = False
Next
Debug.Print sI.Name
'add export to PDF code here
ws.PageSetup.PrintArea = ws.Range("A1:N34").Address
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\testuser\Desktop\testfolder" & Range("M1").Text & ".pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Next
End With
End Sub
"C:\Users\testuser\Desktop\testfolder"
) к каталогу, который существует на вашем компьютере. Я знаю, что это очевидно, но иногда я забываю об этом. - person M--   schedule 21.04.2017Step Into
работает. нажав F8. - person M--   schedule 21.04.2017