宏透视表自动更新日期和名称

时间:2013-10-24 07:05:29

标签: excel vba excel-vba pivot-table

我正在尝试创建一个可以将每日报告拉入数据透视表的宏。我是VB的新手,但是慢慢地解决了。我希望activeworkbook成为我正在使用的那个而不是预定义的名称(这里是报告(40)。)。

然后我希望它能够占据整个范围(每天增加)并制作一个数据透视表。

最后,我希望数据仅使用今天的日期。

任何帮助?

Sub DailyS()
'
' DailyS Macro
'
' Keyboard Shortcut: Ctrl+d
'
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, **SourceData:= _
        "report (40)!R1C1:R324C129**", Version:=xlPivotTableVersion15). _
        CreatePivotTable TableDestination:="**Sheet1!R3C1**", TableName:="PivotTable13" _
        , DefaultVersion:=xlPivotTableVersion15

Sheets("Sheet1").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("PivotTable13").PivotFields("Date")
        .Orientation = xlRowField
        .Position = 1
    End With
With ActiveSheet.PivotTables("PivotTable13").PivotFields("UserP")
    .Orientation = xlRowField
    .Position = 2
End With

With ActiveSheet.PivotTables("PivotTable13").PivotFields(**"Date"**)
    .Orientation = xlPageField
    .Position = 1
End With

ActiveSheet.PivotTables("PivotTable13").PivotFields("Date").CurrentPage = _
    "(All)"
With ActiveSheet.PivotTables("PivotTable13").PivotFields("Date")
    .PivotItems("10/1/2013").Visible = False
    .PivotItems("10/2/2013").Visible = False
    .PivotItems("10/3/2013").Visible = False
    .PivotItems("10/4/2013").Visible = False
    .PivotItems("10/5/2013").Visible = False
    .PivotItems("10/6/2013").Visible = False
    .PivotItems("10/7/2013").Visible = False
    .PivotItems("10/8/2013").Visible = False
    .PivotItems("10/9/2013").Visible = False
    .PivotItems("10/10/2013").Visible = False
    .PivotItems("10/11/2013").Visible = False
    .PivotItems("10/12/2013").Visible = False
    .PivotItems("10/13/2013").Visible = False
    .PivotItems("10/14/2013").Visible = False
    .PivotItems("10/15/2013").Visible = False
    .PivotItems("10/16/2013").Visible = False
    .PivotItems("10/17/2013").Visible = False
    .PivotItems("10/18/2013").Visible = False
    .PivotItems("10/19/2013").Visible = False
    .PivotItems("10/20/2013").Visible = False
    .PivotItems("10/21/2013").Visible = False
    .PivotItems("10/22/2013").Visible = False
End With

1 个答案:

答案 0 :(得分:0)

我只是猜测你想要的东西 但是为了帮助您入门,这里有一些可能有用的代码。

更新数据透视表源并在数据透视表中选择指定日期的代码。

Dim pt as PivotTable, pt_item as PivotItem
Dim date_stamp as Date, source_data as string
Dim ws as WorkSheet
Dim Last_row as Long

Set ws = Activeworkbook.Sheets(1) 'considering Sheet1 has the pivot.
Last_row = ws.Range("A" & ws.Rows.Count).End(xlup).Row    

source_data = ws.Name & "!" & ws.Range("A1:E" & Last_row).Address(ReferenceStyle:=xlR1C1)
'source_data contains your dynamic range address
date_stamp = Format(Now(), "m/d/yyyy") 'this contains the date now, format as you wish

For Each pt in ws.PivotTables
If pt.Name = "PivotTable13" then
    pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
            SourceData:=source_data) 'this refresh the data source
    'this For Loop Selects the Current Date, just change the field name
    For Each pt_item In pt.PivotFields("Field_Name").PivotItems
        Select Case pt_item.Name
        Case date_stamp
            pt_item.Visible = True                
        Case Else            
            pt_item.Visible = False            
        End Select            
    Next pt_item
end if
Next pt

不完全符合您的要求,但我希望这能帮助您入门 我只假设您的数据包含在Columns A:E