Цикл VBA, выберите следующую запись в сводной таблице - PullRequest
0 голосов
/ 31 мая 2018

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

У меня есть критерий под названием «имя объекта», это фильтр отчетов, существует около 30 различных объектов.Я попытался выбрать имя из базы данных на следующем листе:

Хорошо, вот код, который у меня есть, но он работает не так, как задумано.Я проверил это без цикла Pivot, и все было хорошо, однако я должен циклически просмотреть сводную таблицу вручную:

 Dim pt As PivotTable
        Dim pf As PivotField
        Dim pi As PivotItem

        Set pt = Sheet2.PivotTables("PivotTable14")
        Set pf = pt.PivotFields("Entity Name")

        For Each pi In pf.PivotItems



       Windows("SOW.xlsm").Activate

    Sheets(1).Copy After:=Sheets(Sheets.Count)




        Windows("2Copy of Coalition FY17 Database - Global Wallet - Switzerland.xlsx").Activate
        Range("C41:J79").Copy
        Windows("SOW.xlsm").Activate
        Range("D5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False



   Next pi

End Sub

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Вот аналогичный метод

Option Explicit

Public Sub AllFilterValues()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim pvt As PivotTable

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet2")
    Set pvt = ws.PivotTables("PivotTable14")

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Dim pvtField As PivotField
    Dim item As Long, item2 As Long

    Set pvtField = pvt.PivotFields("Entity Name")

    For item = 1 To pvtField.PivotItems.Count

          pvtField.PivotItems(item).Visible = True

          For item2 = 1 To pvtField.PivotItems.Count

              If item2 <> item Then pvtField.PivotItems(item2).Visible = False

          Next item2

         'Your other sub call goes here

    Next item

    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic

End Sub
0 голосов
/ 31 мая 2018

Вот несколько довольно общих кодов для циклического прохождения всех элементов, которые существуют в указанном поле страницы:

Sub LoopPivotPageFields()
    Dim pt As PivotTable
    Dim pf As PivotField
    Dim pi As PivotItem

    Set pt = Sheet1.PivotTables("PivotTable1")
    Set pf = pt.PivotFields("Entity Name")

    For Each pi In pf.PivotItems
        'Do something with the pivot item
        Debug.Print "Do something with pivot item " & pi.Name
        ' For example: set page filter
        pf.ClearAllFilters
        pf.CurrentPage = pi.Name
        Debug.Print "Pivot table is filtered to page item: " & pi.Name
    Next pi
End Sub

Замените «действия» тем, что вам нужно сделать с каждым элементом ...

...