VBA更新数据透视字段

时间:2017-12-07 20:34:09

标签: excel vba pivot-table

我记录了这个:

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Min Closed Mth")
        .PivotItems("2016-10").Visible = False
        .PivotItems("2017-11").Visible = True
    End With

每个月,我都会将此报告作为运行13运行。这是本月运行的。我们减去两个月后再添加一个月。我希望这是有道理的。无论如何,虽然这段代码适用于12月,但每个月前进都没有任何好处。我还要说明,每年的1月都不同。

我想出了这个:

Sub Update_Pivots()

Dim thisMonth As Integer
Dim lastMonth As Integer
Dim thisYear As Integer

If Month(Date) = 1 Then
    thisYear = Year(Date) - 1
    thisMonth = Month(Date) - 1
    lastMonth = Month(Date) - 2
Else
    thisYear = Year(Date)
    thisMonth = Month(Date) - 1
    lastMonth = Month(Date) - 2
End If

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Min Closed Mth")
    .PivotItems("[thisYear].&[-]&.[lastMonth]").Visible = False
    .PivotItems("[thisYear].&[-]&.[thisMonth]").Visible = True
End With

With ActiveSheet.PivotTables("PivotTable2").PivotFields("Min Closed Mth")
    .PivotItems("[thisYear].&[-]&.[lastMonth]").Visible = False
    .PivotItems("[thisYear].&[-]&.[thisMonth]").Visible = True
End With

End Sub

我得到一个运行时'1004错误         无法获取PivotField类的PivotItems属性。

没关系,虽然日期适用于1月,但它们不适用于2月,因为这个月和年应该是最新的,但是lastMonth和year应该是前一年。

这是我的第一篇文章。我一直在用VBA做很多简单的事情但是现在因为这个原因,我被要求做更多。

感谢帮助。

1 个答案:

答案 0 :(得分:1)

只需使用DateAdd计算正确的月份,然后将其格式化为"yyyy-mm"

Sub Update_Pivots()

    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Min Closed Mth")
        .PivotItems(Format(DateAdd("m", -14, Date),"yyyy-mm")).Visible = False
        .PivotItems(Format(DateAdd("m", -1, Date),"yyyy-mm")).Visible = True
    End With

    With ActiveSheet.PivotTables("PivotTable2").PivotFields("Min Closed Mth")
        .PivotItems(Format(DateAdd("m", -14, Date),"yyyy-mm")).Visible = False
        .PivotItems(Format(DateAdd("m", -1, Date),"yyyy-mm")).Visible = True
    End With

End Sub