需要一些数据透视表的指导

时间:2017-03-28 00:12:44

标签: excel-vba vba excel

我每天都运行相同的报告,并希望使用通用的VBA代码来选择我的所有数据并创建数据透视表。我记录了MACRO:

  • 我需要自动选择数据范围以允许任何数据量
  • 我需要自动选择数据范围
  • 表格无关紧要
  • 最后我想说明这张表

代码:

    Sheets.Add
    ActiveWorkbook.Worksheets("Sheet1").PivotTables("PivotTable26").PivotCache. _
        CreatePivotTable TableDestination:="Sheet4!R3C1", TableName:="PivotTable27" _
        , DefaultVersion:=xlPivotTableVersion15
    Sheets("Sheet4").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("PivotTable27").PivotFields("Date Opened")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable27").PivotFields("Date Opened")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable27").PivotFields("Queue")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("PivotTable27").PivotFields("Sub Queue")
        .Orientation = xlRowField
        .Position = 2
    End With
    With ActiveSheet.PivotTables("PivotTable27").PivotFields("Status")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveSheet.PivotTables("PivotTable27").AddDataField ActiveSheet.PivotTables( _
        "PivotTable27").PivotFields("Source"), "Count of Source", xlCount
    With ActiveSheet.PivotTables("PivotTable27").PivotFields("Queue")
        .PivotItems("(blank)").Visible = False
    End With
End Sub

1 个答案:

答案 0 :(得分:0)

这里有一些代码可以帮助您了解您在帖子中提到的内容:

Option Explicit

Sub AutoPivot()

Dim PT              As PivotTable
Dim PTCache         As PivotCache
Dim PtDataRng       As Range
Dim ws              As Worksheet
Dim LastRow         As Long
Dim LastCol         As Long

Set ws = Worksheets("PivotData") ' <-- modify "PivotData" to your sheet's name that holds the dynamic data
With ws
    LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column ' <-- get last column with data in row 1
    LastRow = .Cells(.Rows.Count, "A").End(xlToLeft).Row ' <-- get last row with data in column A
    Set PtDataRng = .Range(.Cells(1, 1), .Cells(LastRow, LastCol)) ' <-- set the dynamic Range
End With

' create a new wroksheet, place it at the end, and use an InputBox to select it's name
Set ws = ThisWorkbook.Sheets.Add(after:=Sheets(ThisWorkbook.Sheets.Count))
ws.Name = Application.InputBox("Select A Valid Name for new sheet", Type:=2)

' set the Pivot Cache to updated dynamic Ranget
Set PTCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PtDataRng)

' Create Pivot Table from Pivot Cache
Set PT = ws.PivotTables.Add(PivotCache:=PTCache, TableDestination:=ws.Range("A3"), TableName:="PivotTableTest")

' set the fields setting in the Pivot Table
With PT
    With .PivotFields("Date Opened")
        .Orientation = xlRowField
        .Position = 1
    End With
    With .PivotFields("Date Opened")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With .PivotFields("Queue")
        .Orientation = xlRowField
        .Position = 1
    End With
    With .PivotFields("Sub Queue")
        .Orientation = xlRowField
        .Position = 2
    End With
    With .PivotFields("Status")
        .Orientation = xlColumnField
        .Position = 1
    End With

    .AddDataField .PivotFields("Source"), "Count of Source", xlCount
    With .PivotFields("Queue")
        .PivotItems("(blank)").Visible = False
    End With

End With

End Sub