Excel 2007 VBA - список полей сводной таблицы ??? создает ошибку


Последнее обновление 14 октября 2011 г. - Теперь я знаю больше информации, поэтому я резюмирую все здесь и удаляю все свои предыдущие описания / вопросы.

Проблема в том, что после запуска определенной программы я получаю странную ошибку. Это похоже, но не совсем так, когда я нажимаю «Разделить». Разница в том, что сплошные серые полосы не отображаются. Это как-то странно. Совсем недавно я начал думать, что это, вероятно, вызвано списком полей задействованных сводных таблиц.

Проблема возникает с любым из трех следующих фрагментов кода

Код 1

Dim pvtCache As PivotCache
For Each pvtCache In ThisWorkbook.PivotCaches
    pvtCache.Refresh
Next pvtCache

Код 2

ThisWorkbook.RefreshAll

Код 3

Dim ws As Worksheet
Dim pt As PivotTable
For Each ws In ThisWorkbook.Worksheets
    For Each pt In ws.PivotTables
        pt.RefreshTable
    Next pt
Next ws

Но не с этим, единственная разница в том, что я добавил ws.Activate в Code 3.

Код 4

Dim ws As Worksheet
Dim pt As PivotTable
For Each ws In ThisWorkbook.Worksheets
    ws.Activate
    For Each pt In ws.PivotTables
        pt.RefreshTable
    Next pt
Next ws

Итак, мой вопрос: можно ли это объяснить? Может ли кто-нибудь исправить Код 1 (который намного быстрее в электронной таблице с 2 сводными кешами из больших источников данных, но 46 сводными таблицами), чтобы он работал без этой ошибки?

Спасибо за любую помощь !!!


person GeoffDS    schedule 14.09.2011    source источник
comment
мы не можем угадать, не увидев код, и вы не можете опубликовать его так ... Ну, в любом случае, вы все равно можете установить некоторые точки останова в своем коде (и прокомментировать любой screenupdating, установленный в false) и посмотреть где (при установке точек останова в несколько строк вашего кода) появляются расколы. Это, вероятно, поможет вам сосредоточиться на неправильных линиях   -  person JMax    schedule 14.09.2011
comment
Не знаете, почему вы не хотите публиковать свой код: ваша компания боится, что мы скопируем вашу секретную ошибку? Мы все публикуем здесь рабочий код ...   -  person Tim Williams    schedule 14.09.2011
comment
Можете ли вы обновить все сводные таблицы вручную? Я подозреваю, что вы не можете.   -  person adamleerich    schedule 15.09.2011
comment
@adamleerich Извините, я не понимаю. Вы имеете в виду без кода? Я могу попробовать это, но это было бы большой проблемой и не лучшим долгосрочным решением. Или вы хотите вместо этого обновить каждую сводную таблицу в коде, в отличие от приведенного выше, который обновляет каждую сводную кэш-память? Дело в том, что на листе 46 сводных таблиц и всего 2 сводных кэша, поэтому потребуется 44 дополнительных обновления, что займет около 45 секунд. Но это, наверное, было бы лучше, чем эта странная штука с экраном.   -  person GeoffDS    schedule 16.09.2011
comment
Проблема в том, что после запуска определенной программы я получаю странную ошибку. - В чем именно заключается ошибка?   -  person Robert Mearns    schedule 21.10.2011


Ответы (2)


У меня есть несколько сводок из нескольких листов, и все три фрагмента кода работают нормально. Проблема должна быть в другом, а не в коде.

person Jack7    schedule 21.10.2011

Ваши фрагменты кода работают правильно.

Может случиться так, что изображение на экране не обновляется после запуска вашего кода.

Попробуйте добавить этот раунд в свой код:

Application.ScreenUpdating = False
    ''//Your code here
DoEvents
Application.ScreenUpdating = True
person Robert Mearns    schedule 21.10.2011