每当有人刷新桌子时都盖上日期戳

时间:2019-04-01 19:24:51

标签: excel vba pivot-table refresh

我的Sheet1中有一个数据透视表,该数据透视表连接到也是Excel表的外部源。我要做的就是每当有人刷新数据透视表时获取日期和时间戳。

我得到一个错误对象不支持此属性或方法。

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

2 个答案:

答案 0 :(得分:1)

问题在于WS是一个工作表,而一个工作表不支持另一个工作表作为属性。

工作表是工作书的属性,所以

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

解决问题

答案 1 :(得分:0)

为此,Excel VBA中有一个精美的内置事件。在数据透视表的工作表中,选择事件PivotTableUpdateEvent Documentation):

enter image description here

在工作表上可能有多个枢纽分析表的情况下,最好使用其名称来检查哪个是刷新的表:

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")获得的,并打印到立即窗口( Ctrl + G )。除了在此处打印以外,还可以选择将其写入服务器或单独的工作表getting the last cell of a row,如下所示:

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