0

代码有效!谢谢您的帮助!

我正在尝试创建一个动态数据透视表,该表将处理行数不同的数据。目前,我有 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
4

2 回答 2

2

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

 PivotCaches.Create
于 2012-09-28T13:20:48.987 回答
1

除了更改行数之外,您使用 VBA 的任何原因?

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

如果您在 Excel 2003 中,您也可以创建动态命名范围。它稍微复杂一些(而且更丑陋),但如果你被困在旧版本上,我可以引导你完成它。

于 2012-09-25T15:55:38.757 回答