遍历数据透视表中的过滤器

时间:2020-05-25 11:01:29

标签: excel vba pivot-table

我是VBA的新手,正在尝试编写我似乎无法正确理解的代码。

我要实现的目标:

我有一个具有一个行和列字段的数据透视表。一个过滤器有50多个选项。这在图像的单元格c2中。下面还执行了一个简单的计算,具体取决于数据透视表中的值。我想在单元格c47:j47中创建一个代码,该代码贯穿过滤器中的所有选项,并将简单计算的结果连同过滤器选项标题一起复制到新的电子表格(Sheet5)中。

因此,在工作表5中,对于过滤器中的第一个选项,将数据透视表(2)中的单元格c2复制到单元格A1中,并将数据透视表(2)中的c47:j47复制到Sheet5中的B1:H1中,然后转到过滤器中的第二个选项,并将结果粘贴到下面。 Please see picture here.

任何人都可以帮助我吗?这是我的下面的代码。在出现错误的地方,我无法获取PivotTable类的PivotFields属性。

Sub PivotStockItems() 
Dim i As Integer 
Dim sItem As String 
Dim pivotSht As Worksheet, dataSht As Worksheet
Set pivotSht = Sheets("Pivot (2)") 
Set dataSht = Sheets("Sheet5") 
Application.ScreenUpdating = False
With pivotSht.PivotTables("CummulativeClaims")
    .PivotCache.MissingItemsLimit = xlMissingItemsNone
    .PivotCache.Refresh
    With .PivotFields("Yes")
        .PivotItems(1).Visible = True
        For i = 2 To .PivotItems.Count
            .PivotItems(i).Visible = False
        Next
        For i = 1 To .PivotItems.Count
            .PivotItems(i).Visible = True
            If i <> 1 Then .PivotItems(i - 1).Visible = False
            sItem = .PivotItems(i)

            'this takes care of the condition and copy-pasting
            If pivotSht.Range("c47").Value > 0 Then
                dataSht.Cells(getLastFilledRow(dataSht) + 1, 1).Value = sItem
                dataSht.Cells(getLastFilledRow(dataSht), 2).Value = pivotSht.Range("c47:j47").Value
            Else: End If

        Next i
    End With
End With
End Sub

Public Function getLastFilledRow(sh As Worksheet) As Integer 
On Error Resume Next 
getLastFilledRow = sh.Cells.Find(What:="*", _ 
                   After:=sh.Range("A1"), _ 
                   LookAt:=xlPart, _ 
                   LookIn:=xlValues, _ 
                   SearchOrder:=xlByRows, _ 
                   SearchDirection:=xlPrevious, _ 
                   MatchCase:=False).Row 
     On Error GoTo 0 
End Function

0 个答案:

没有答案