每当有人刷新 table 时的日期戳

Date Stamp whenever someone refreshes the table

我的 Sheet1 中有一个枢轴 table 连接到外部源,它也是一个 excel sheet。我想要做的就是在有人刷新数据透视表 table 时获取日期和时间戳。

我收到错误消息对象不支持此 属性 或方法。

Private Sub Refresh_Click()
Dim PT As PivotTable
Dim WS As Worksheet
  For Each WS In ThisWorkbook.Worksheets
  For Each PT In WS.PivotTables
  PT.RefreshTable
  WS.Sheets("Month-to-Date").Range("P5") = TimeValue(Now)
  Next PT
  Next WS
End Sub

问题是 WS 是一个工作表,并且一个工作表不支持另一个工作表作为 属性。

Worksheets 是 Workbooks 的属性,所以

ThisWorkbook.Sheets("Month-to-Date").Range("P5") = TimeValue(Now)

解决了问题

在 Excel VBA 中有一个奇特的内置事件。在枢轴 table、select 的工作表中,事件 PivotTableUpdate (Event Documentation):

至于工作表上可能会有超过 1 个枢轴 table,最好使用其名称检查哪一个是刷新的:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

    Select Case Target.Name

    Case "PivotTable2"
        Debug.Print "Write date somewhere "; Format(Now, "DD-MM-YYYY")
    Case Else
        Debug.Print "Not PivotTable2"
    End Select        

End Sub

"DateStamp"通过Format(Now, "DD-MM-YYYY")得到,打印到立即window(Ctrl+G).可以选择将其写入服务器或单独的工作表,而不是在那里打印, 像这样:

Case "PivotTable2"
    Worksheets(2).Cells(lastCell, 1) = Format(Now, "DD-MM-YYYY")