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

Excel 每当有人刷新桌子时都要盖上日期戳,excel,vba,pivot-table,refresh,Excel,Vba,Pivot Table,Refresh,我的工作表1中有一个连接到外部源的数据透视表,它也是一个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.S

我的工作表1中有一个连接到外部源的数据透视表,它也是一个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
问题是WS是一个工作表,而工作表不支持将另一个工作表作为属性

工作表是工作簿的属性,因此


修复了此问题

Excel VBA中有一个奇特的内置事件。在数据透视表的工作表中,选择事件数据透视表更新:

工作表上可能有多个透视表,最好使用其名称检查哪个是刷新的透视表:

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
通过FormatNow、DD-MM-YYYY获取日期戳,并将其打印到即时窗口Ctrl+G。不在此处打印,可以选择将其写入服务器或单独的工作表,如下所示:

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

试试看:ThisWorkbook.SheetsMonth-to-Date.RangeP5=TimeValueNow谢谢,它成功了。只是想一想。如果有人意外或故意将工作表月份的名称更改为其他名称,会发生什么情况。这不会把整个代码都扔掉吗?
Case "PivotTable2"
    Worksheets(2).Cells(lastCell, 1) = Format(Now, "DD-MM-YYYY")