2016-06-28 3 views
2

Мне нужно запустить макрос после того, как некоторые данные в таблице/сводной таблице обновляются. Моя таблица считывает данные из базы данных, поэтому я хочу, чтобы макрос запускался после обновления. Как мне это сделать с помощью VBA. Я пробовал следующее.Запуск макроса после обновления данных

Private Sub Worksheet_PivotTableUpdate(ByVal target As PivotTable) 
    Application.Run "overrideManagers" 'Is this right? 
End Sub 
Sub overrideManagers() 'Macro to be run upon refresh of data 
    MsgBox "Hello" 
End Sub 

Я не понимаю, чего ожидали. Я просто обновляю, но без MsgBox. Даже если я переместил MsgBox на это.

Private Sub Worksheet_PivotTableUpdate(ByVal target As PivotTable) 
    MsgBox "Hello" 
End Sub 

Получаю те же результаты. Это заставляет меня думать, что мой оригинальный метод обнаружения обновления неправильный. Есть идеи?

+0

У вас есть код для события «Worksheet_PivotTableUpdate» на листе со сводной таблицей? Это, безусловно, работает для меня (второй фрагмент кода). – Ralph

+0

Я согласен с @Ralph. Вероятно, у вас есть событие триггера на листе с исходными данными, а не с таблицей сводных данных. Ральф, я бы предложил вам разместить это как ответ. – nbayly

ответ

2

Это может быть немного длинный ответ. Я попытаюсь объяснить это ясно.

Ниже приведены шаги, которые я затем

  1. Создано новый книги Excel с помощью простой таблицы и данных (Лист1)
  2. Создано сводную таблицу для этих данных (сводную таблицу в другом листе - Лист2)

enter image description here 3. Добавлен следующий код в редакторе макросов под Sheet2

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) 
    MsgBox "update" 
End Sub 

4. Выбранный лист2, щелкните правой кнопкой по сводной таблице и обновите. Отображается поле сообщения enter image description here

Надеюсь, что это поможет.

+0

Таблица Pivot не считывает данные из другой таблицы. Он считывает данные из базы данных. Есть ли другой способ обновления? –

+0

Я просто попытался подключиться к базе данных Access, и тот же метод выше работал просто отлично. Пока вы обновляете сводную таблицу, событие будет активировано. – Barney

+0

Я решил это, используя только 'Worksheet_Change()' только на некотором вычисленном поле, но спасибо за ответ. –

Смежные вопросы