具有动态数据范围的数据透视表的Excel VBA宏

时间:2012-09-25 15:43:55

标签: macos excel excel-vba pivot-table vba

代码正在运作!感谢帮助!

我正在尝试创建一个动态数据透视表,该表将处理行数不同的数据。目前,我有28,300行,但这可能每天都有变化。

数据格式示例如下:

Case Number    Branch      Driver
1342           NYC         Bob
4532           PHL         Jim
7391           CIN         John
8251           SAN         John
7211           SAN         Mary
9121           CLE         John
7424           CIN         John

已完成的表格示例:

Driver    NYC    PHL   CIN   SAN   CLE
Bob       1      0     0     0     0
Jim       0      1     0     0     0    
John      0      0     2     1     1     
Mary      0      0     0     1     0     

代码如下:

Sub CreateSummaryReportUsingPivot()
' Use a Pivot Table to create a static summary report
' with model going down the rows and regions across
Dim WSD As Worksheet
Dim PTCache As PivotCache
Dim PT As PivotTable
Dim PRange As Range
Dim FinalRow As Long
Dim FinalCol As Long
Set WSD = Worksheets("PivotTable")

'Name active worksheet as "PivotTable"
 ActiveSheet.Name = "PivotTable"

' Delete any prior pivot tables
For Each PT In WSD.PivotTables
    PT.TableRange2.Clear
Next PT

' Define input area and set up a Pivot Cache
FinalRow = WSD.Cells(Application.Rows.Count, 1).End(xlUp).Row
FinalCol = WSD.Cells(1, Application.Columns.Count). _
    End(xlToLeft).Column
Set PRange = WSD.Cells(1, 1).Resize(FinalRow, FinalCol)
Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:= _
    xlDatabase, SourceData:=PRange)

' Create the Pivot Table from the Pivot Cache
Set PT = PTCache.CreatePivotTable(TableDestination:=WSD. _
    Cells(2, FinalCol + 2), TableName:="PivotTable1")

' Turn off updating while building the table
PT.ManualUpdate = True

' Set up the row fields
PT.AddFields RowFields:="Driver", ColumnFields:="Branch"

' Set up the data fields
With PT.PivotFields("Case Number")
    .Orientation = xlDataField
    .Function = xlCount
    .Position = 1
End With

With PT
    .ColumnGrand = False
    .RowGrand = False
    .NullString = "0"
End With

' Calc the pivot table
PT.ManualUpdate = False
PT.ManualUpdate = True

End Sub

2 个答案:

答案 0 :(得分:2)

他们更改了PivotCaches的对象模型。您需要在2007-2010中使用的方法(使用VBA版本7而不是版本6)

 PivotCaches.Create

答案 1 :(得分:1)

除了更改行数之外,您使用VBA的原因是什么?

如果您使用的是Excel 2007/2010,请从原始数据创建常规表/列表(Ctrl-L)。你也可以给它一个名字。然后创建一个数据透视表并使用表名作为数据源。当您添加行时,您的表将展开,然后您可以只刷新数据透视表(F5,或使用VBA)。

如果您使用的是Excel 2003,则还可以创建动态命名范围。它稍微复杂一点(而且更难看)但是如果你被困在旧版本上,我可以引导你完成它。

相关问题