Как фильтр сводной таблицы может уничтожить динамические именованные диапазоны? - PullRequest
2 голосов
/ 04 октября 2019

Проблема не решена, ответ ниже

У меня есть код, который отлично работал в последние месяцы.
В течение ночи между вчера и сегодня, пока никто не использовалкомпьютер (работает только автоматический код VBA) перестал работать.

Короче говоря, автоматический код VBA обновляет таблицу на листе 1, сводная таблица на листе 2 использует первые четыре символа времени и значение вв это время.
Пример (время 10:15) time = 10:1, value = 5555. Причина обрезания последней минуты состоит в том, чтобы получить «округленное число», когда это масштабируется до месячных данных, лучше иметь 10: 1, чем 10:15, 10:16 и 10:17 и так далее.

После того, как данные находятся на листе 2, именованный диапазон используется для получения интересной части таблицы (две строки выше первого значения> 0 до конца таблицы), обычно это означает строку 35 ~ 40 и конец вряд 148-й.

 =OFFSET(Blad2!$B$5,MATCH(TRUE,Blad2!$B$5:$B$148<>0,0)-3,0,MATCH(TRUE,Blad2!$B$5:$B$148="",0)-MATCH(TRUE,Blad2!$B$5:$B$148<>0,0)+2,1)

Этот именованный диапазон используется в диаграмме.

VBA, который по какой-то причине, начиная со вчерашнего дня, разрушает это:

ThisWorkbook.RefreshAll
ThisWorkbook.Sheets("Blad2").Calculate
ThisWorkbook.Sheets("Blad2").PivotTables("Pivottabell1").PivotFields("Datum").ClearAllFilters
ThisWorkbook.Sheets("Blad2").PivotTables("Pivottabell1").PivotFields("Veckodag").ClearAllFilters

Сводная таблица выглядит следующим образом:
enter image description here

То, что я делаю, - это изменение фильтра таблицы с того, что на рисунке показаны четверги и пятницы.
И для этого мне нужно сначала сбросить фильтры, затем выполнить цикл и сбросить все, кроме пятницы.
Но каккак только фильтр сброшен, динамические диапазоны перестают работать.
Что может вызвать это?

1 Ответ

1 голос
/ 04 октября 2019

Когда я набирал этот вопрос, я обнаружил проблему.
Я буквально набрал вторую последнюю строку Но как только , и тогда я понял это.

Я считаю, что это может быть проблемой и для других, поэтому я продолжаю задавать этот вопрос.

Проблема в том, что сводная таблица выросла вниз.
Я думал, что у меня в таблице все "округленные времена", но кажется, что одного не хватает, и это заставило его расширяться за пределы, где пытался динамический диапазончтобы найти конец таблицы.
Просто добавив две строки в диапазон (148 => 150), все снова заработало нормально.

=OFFSET(Blad2!$B$5,MATCH(TRUE,Blad2!$B$5:$B$150<>0,0)-3,0,MATCH(TRUE,Blad2!$B$5:$B$150="",0)-MATCH(TRUE,Blad2!$B$5:$B$150<>0,0)+2,1)

Теперь я дважды проверил, что все "округленные времена"находятся в таблице, поэтому он не может расти снова.

Да, я должен купить резиновую утку ...

...