我的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
答案 0 :(得分:1)
问题在于WS
是一个工作表,而一个工作表不支持另一个工作表作为属性。
工作表是工作书的属性,所以
ThisWorkbook.Sheets("Month-to-Date").Range("P5") = TimeValue(Now)
解决问题
答案 1 :(得分:0)
为此,Excel VBA中有一个精美的内置事件。在数据透视表的工作表中,选择事件PivotTableUpdate
(Event Documentation):
在工作表上可能有多个枢纽分析表的情况下,最好使用其名称来检查哪个是刷新的表:
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")