【发布时间】:2018-04-05 19:58:48
【问题描述】:
我正在尝试在数据透视表上运行 vba,因为我需要为我的报告更新 50 多个表,这只有在我可以使用 vba 执行此操作时才能节省时间。
使用 vba,我可以将数据透视表中的结果直接复制到同一工作簿的另一张工作表的单元格中。我在尝试添加过滤器时遇到了困难。
我能够运行获得摘要信息的第一部分,现在我正在尝试添加 "Revised Territory" 过滤器,我想过滤 "SE" 然后它什么也没做。
我使用 F8 进行检查,看起来它只是通过而没有任何错误,但没有添加任何过滤器,所以我得到了与我的摘要数据相同的信息.
我的代码
Sub InsertPivotTable()
''''''''''''''''''
'''Pivot Set Up'''
''''''''''''''''''
'Declare Variables
Dim PSheet As Worksheet
Dim DSheet As Worksheet
Dim SSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As PivotTable
Dim PRange As Range
Dim LastRow As Long
Dim LastCol As Long
'Insert a New Blank Worksheet
On Error Resume Next
Sheets.Add Before:=ActiveSheet
ActiveSheet.Name = "PivotTable"
Application.DisplayAlerts = True
Set PSheet = Worksheets("PivotTable")
Set DSheet = Worksheets("PIF Data")
Set SSheet = Worksheets("Summary")
'Define Data Range
LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
LastCol = 76
Set PRange = DSheet.Cells(1, 1).Resize(LastRow, LastCol)
'''''''''
'Summary'
'''''''''
'Define Pivot Cache
Set PCache = ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:=PRange). _
CreatePivotTable(TableDestination:=PSheet.Cells(3, 1), _
TableName:="NB Summary")
'Insert Blank Pivot Table
Set PTable = PCache.CreatePivotTable _
(TableDestination:=PSheet.Cells(1, 1), TableName:="NB Summary")
Dim Pvt As PivotTable
Set Pvt = Worksheets("PivotTable").PivotTables("NB Summary")
'Add fields to rows & values, re-name title of value
With Pvt
.PivotFields("Policy Form").Orientation = xlColumnField
.PivotFields("Phone/Email").Orientation = xlRowField
.AddDataField .PivotFields("Policy Number"), "Count of Policy Number", xlCount
End With
PSheet.Range("B5:B6").Copy
SSheet.Range("E6").PasteSpecial Paste:=xlPasteValues
PSheet.Range("C5:C6").Copy
SSheet.Range("G6").PasteSpecial Paste:=xlPasteValues
''''
'SE'
''''
With Pvt
.ClearAllFilters
.PivotFields("Revised Territory").PivotFilter.Add Type:=xlCaptionContains, Value1:="SE"
End With
PSheet.Range("B5:B6").Copy
SSheet.Range("E12").PasteSpecial Paste:=xlPasteValues
PSheet.Range("C5:C6").Copy
SSheet.Range("G12").PasteSpecial Paste:=xlPasteValues
'Delete PivotTable Sheet
Application.DisplayAlerts = False
Worksheets("PivotTable").Delete
Application.DisplayAlerts = True
End Sub
【问题讨论】:
-
删除“on error resume next”行,这样您就可以查看发生的位置和错误(“on error resume next”会导致它被忽略)
-
@sc1324 你有什么理由不简单地使用数据透视表本身作为报告?鉴于您在下面的评论,听起来这只是您报告“难题”的一部分。如果您预先提供更多关于您的最终目标的背景信息,您可能不需要问那么多后续问题。
-
嗨,对不起,我没有指定这个特定项目的要求,我的目的是尝试自己做这件事,所以我不想在身体,没有做任何事情,并试图在这里获得免费通行证。
标签: vba excel pivot-table