2014-02-17 1 views
1

Я создал сводную таблицу, чтобы суммировать некоторую информацию и добавил некоторые формулы, смежные с сводной таблицей, чтобы делать вычисления на числах, включенных в нее. Я создал макрос, который повторно вводит формулы, когда пользователь изменяет размер сводной таблицы (в событии PivotTableUpdate), показывая или скрывая различные строки/столбцы данных.Как подавить сообщение Excel для любого обновления сводной таблицы?

Моя проблема заключается в том, что всякий раз, когда столбцы данных добавляются в сводную таблицу, он спрашивает меня: «Вы хотите заменить содержимое ячеек назначения?» Я всегда нажимаю «да», потому что, хотя ячейки будут перезаписаны, когда сводная таблица будет расширяться, формулы будут снова введены в их правильную ячейку, и все будет исправлено и отформатировано соответствующим образом макросом.

Поэтому я хотел бы знать, где я должен поставить application.displayalerts = false, чтобы было эффективно подавлять окно сообщения всякий раз, когда пользователь расширяет сводную таблицу.

+1

Не думаю, что вы можете подавить оповещение таким образом. Было бы иначе, если бы обновление PT было вызвано в коде. Как бы то ни было, к тому времени, когда вызывается «PivotTableUpdate», слишком поздно. Обход, который вы можете попробовать, - это изменить макрос, чтобы поместить формулы в безопасное место в несколько столбцов справа и скрыть пробел между PT и формулами. –

+0

Я надеялся найти отдельное событие, чтобы прикрепить код, который будет происходить до отображения сообщения. Тем не менее, я пробовал использовать события «PivotTableBeforeAllocateChanges», «PivotTableBeforeCommitChanges» и «PivotTableBeforeDiscardChanges» без какой-либо удачи. Я предполагаю, что никаких других событий, которые могут произойти до появления сообщения, не произойдет. Если это так, я полагаю, мне придется использовать предлагаемое решение. – tlewis3348

ответ

0

Привет tlewis3348 я думаю, что это то, что вы ищете

Sub UpdateIt() 
    Dim iP As Integer 
    Application.DisplayAlerts = False 
    For iP = 1 To ActiveSheet.PivotTables.Count 
     ActiveSheet.PivotTables(iP).RefreshTable 
    Next 
    Application.DisplayAlerts = True 
End Sub 
+0

Не могли бы вы предоставить дополнительную информацию? Куда это идет, и что он делает? Я пытаюсь поймать событие, прежде чем сводная таблица будет изменена, когда пользователь добавит столбец. Похоже, что это всего лишь макрос для обновления сводных таблиц в рабочей книге (при подавлении ошибки, которую я пытаюсь подавить). Я не уверен, как это помогает, поскольку пользователь все равно будет добавлять столбцы в сводную таблицу, и сообщение не будет подавлено. Поэтому, если бы вы могли прояснить, что это делает и как оно совершило то, что я хочу, я бы очень признателен. – tlewis3348

0

FWIW Это решение работает отлично подходит для меня. Я просто активировал каждый лист отдельно и вызывал функцию UpdateIt, прежде чем делать что-либо еще, например,

Worksheets("RFS Monthly Summary").Activate 
UpdateIt 
Worksheets("RFS Daily Activity").Activate 
UpdateIt 
Смежные вопросы