我是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