Loop Through Pivot Slicer и Print - PullRequest
       15

Loop Through Pivot Slicer и Print

0 голосов
/ 15 октября 2018

Я немного новичок в VBA и пробовал несколько разных решений на этом сайте, но мне не повезло.У меня есть панель инструментов в файле Excel, связанная с несколькими таблицами - я хочу изменить срезы расположения и распечатать панель мониторинга для каждого сайта.В отдельном файле у меня есть некоторый код VBA для циклического перемещения по слайсеру местоположения в выбранной активной книге, и я думаю, что я понял, что, поскольку я использую PowerPivot для извлечения данных, мне нужно использовать уровень slercacheachelevel.

Ошибка, которую я получаю сейчас: Ошибка времени выполнения 1004 Ошибка приложения или объекта.

Это то, что у меня есть:

Sub DashboardCreate()
Dim wb As String
Dim sh As Worksheet
Dim fname As String
Dim location As String
Dim sI As SlicerItem, sI2 As SlicerItem, sC As SlicerCache
Dim index As Integer

location = "T:\Sarah\Weekly Sales Reports\"

Set sC = ActiveWorkbook.SlicerCaches("Slicer_LocationName7")
'loop through

With sC
For Each sI In sC.SlicerCacheLevels(1).SlicerItems
  sC.ClearManualFilter
    For Each sI2 In sC.SlicerCacheLevels(1).SlicerItems
*error appears on this next line*
     If sI.Name = sI2.Name Then sI2.Selected = True Else: sI2.Selected = False 
    Next
 Debug.Print sI.Name
 fname = sh.Range("B11").Value
 sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=location & fname    & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Next

End With

End Sub

1 Ответ

0 голосов
/ 18 августа 2019

Цикл в этом коде работает в Power Pivot, я отредактировал часть кода в соответствии с вашим вопросом.Вы можете настроить имя файла, параметры печати и т. Д. С помощью своего кода.

'This VBA will loop through your Power Pivot slicer and print the results to PDF.
'To get it working change slicer name and storage location in below VBA.

Private Sub PowerPivotLoopSlicerPrintPDF()
Dim SC As SlicerCache
Dim SL As SlicerCacheLevel
Dim SI As SlicerItem

Set SC = ActiveWorkbook.SlicerCaches("Slicer_LocationName7") 'Add slicer name between " "
Set SL = SC.SlicerCacheLevels(1)

'c(ounter) is set to 1, ready to begin
c = 1


'Repeat the a loop until number of prints exceeds number of items in slicer
Do While c <= SC.SlicerCacheLevels.Item.Count + 1

'This makes sure that SI is the correct slicer. Needed for corrent file name.
    For Each SI In SL.SlicerItems
        If SI.Selected = True Then
        SlicerverdiIndex = c
    Exit For
        End If
    Next SI


    'PRINT CODE
    Dim FName           As String
    Dim FPath           As String

    'Define file path for printed file storage
    FPath = "T:\Sarah\Weekly Sales Reports\"   'Choose your filepath
    FName = SI.SourceName

    'Define WHAT to print and how to build file name
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    FPath & "\" & FName & ".pdf", Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
    False

    'PRINT CODE FINISHED

'Sets the slicer to the last item in the list
If SlicerverdiIndex = 1 Then
    SlicerverdiIndex = SC.SlicerCacheLevels.Item.Count + 1
End If
SC.VisibleSlicerItemsList = SL.SlicerItems(SlicerverdiIndex - 1).Name

'Adds 1 to the counter, will loop until end of slicer has been reached.
c = c + 1

Loop

End Sub
...