Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 宏透视表自动更新日期和名称_Excel_Vba_Pivot Table - Fatal编程技术网

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

Excel 宏透视表自动更新日期和名称,excel,vba,pivot-table,Excel,Vba,Pivot Table,我正在尝试创建一个宏,可以将每日报告拉入数据透视表。我对VB非常陌生,但工作起来很慢。我希望activeworkbook是我正在使用的,而不是预定义的名称(这里是report(40)) 然后,我希望它采取整个范围(每天增加),并作出一个数据透视表出来 最后,我希望数据只使用今天的日期 有什么帮助吗 Sub DailyS() ' ' DailyS Macro ' ' Keyboard Shortcut: Ctrl+d ' Sheets.Add ActiveWorkbook.Pivo

我正在尝试创建一个宏,可以将每日报告拉入数据透视表。我对VB非常陌生,但工作起来很慢。我希望activeworkbook是我正在使用的,而不是预定义的名称(这里是report(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

我只是在猜测你想要什么。
但为了帮助您入门,这里有一些代码可能会有所帮助

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

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
不完全是您需要的,但我希望这能让您开始。
我只假设您的数据包含在
列A:E