Отметка даты всякий раз, когда кто-то обновляет таблицу - PullRequest
0 голосов
/ 01 апреля 2019

В моем 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 ]

1 голос
/ 01 апреля 2019

Проблема в том, что WS является рабочим листом, а рабочий лист не поддерживает другой рабочий лист как свойство.

Рабочие листы - это свойства Work books so

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

Исправляет проблему

0 голосов
/ 02 апреля 2019

Для этого в Excel VBA есть необычное встроенное событие. На листе сводной таблицы выберите событие PivotTableUpdate ( Документация по событиям ):

enter image description here

Поскольку, возможно, на листе будет более 1 сводной таблицы, рекомендуется проверить, какая из них обновлена, используя ее имя:

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 ). Вместо того, чтобы печатать там, можно записать его на сервер или на отдельный лист, получив последнюю ячейку строки , например:

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