在Excel数据透视表中设置组选择的动态日期

在Excel数据透视表中设置组选择的动态日期,excel,pivot-table,vba,Excel,Pivot Table,Vba,我有一个从TFS中提取的数据集,它从过去一年(@Today-365)中获取数据。数据由Excel获取,然后用于填充数据透视表,数据透视表按28天的日期段分组。我想自动化小组日期,但无法让我的代码工作或在网上找到好的例子 这是我到目前为止得到的 Sub SetStartDate() ' Sets the date for the Start Date, End Date, and Groupings for the Date Periods ' Dim wbk As Workbook Dim

我有一个从TFS中提取的数据集,它从过去一年(@Today-365)中获取数据。数据由Excel获取,然后用于填充数据透视表,数据透视表按28天的日期段分组。我想自动化小组日期,但无法让我的代码工作或在网上找到好的例子

这是我到目前为止得到的

Sub SetStartDate()
'   Sets the date for the Start Date, End Date, and Groupings for the Date Periods
'

Dim wbk As Workbook
Dim ws As Worksheet
Dim pvt As PivotTable
Dim pvtFld As PivotField
Dim startDate As Date
Dim endDate As Date
Dim rowLabel As String

'Application.ScreenUpdating = False    ' Turn on Later

Set wbk = ActiveWorkbook
Set ws = wbk.ActiveSheet
Set startDate = Today() 'incomplete
Set endDate = Today()-365days 'incomplete

For Each pvt In ws.PivotTables
    Debug.Print "Pivot Name = " & pvt.name
    Debug.Print "Pivot Field Count = " & pvt.PivotFields.Count

    For Each pvtFld In pvt.RowFields
        Debug.Print "Pivot Field = " & pvtFld.name  ' Name of Pivot field
        rowLabel = pvtFld.name
        Debug.Print "Row Label = " & rowLabel
'THIS LINE DOESN'T WORK, BUT THIS IS WHERE I RUN INTO TROUBLE IN MY CODE
        pvtFld.Selection.Group start:=CLng(startDate), End:=CLng(endDate), By:=28, Periods:=Array(False, False, False, True, False, False, False)

    Next pvtFld
Next pvt

'Application.ScreenUpdating = True    ' Remove comment later

End Sub

作为我在中间国家的评论,我不知道去哪里去弄清楚罗菲尔德的名字是什么。

< P>我在发布几分钟后偶然发现了自己的解决方案——希望这有利于其他人……/P>
Sub SetStartDate()
'   Sets the date for the Start Date, End Date, and Groupings for the Date Periods

Dim wbk As Workbook
Dim ws As Worksheet
Dim pvt As PivotTable
Dim pvtFld As PivotField
Dim startDate, endDate As Long
Dim pivotName, rowLabel As String

Application.ScreenUpdating = False

Set wbk = ActiveWorkbook
Set ws = wbk.ActiveSheet
    startDate = ws.Range("P2").Value    ' Location of StartDate in Spreadsheet
    endDate = ws.Range("P1").Value  ' Location of EndDate in Spreadsheet

For Each pvt In ws.PivotTables
    For Each pvtFld In pvt.RowFields
        Debug.Print "Pivot Field = " & pvtFld.name
        rowLabel = pvtFld.name
'        Debug.Print "Row Label = " & rowLabel
        pvtFld.DataRange.Group start:=startDate, End:=endDate, By:=28, Periods:=Array(False, False, False, True, False, False, False)
    Next pvtFld

Next pvt

Application.ScreenUpdating = True

End Sub