Ошибка в данных сводной таблицы при использования фильтра через макрос, использовал office 2013 x64 на разных компьютерах, с разными файлами, проблема остается.
Всем добрый день! Столкнулся со следующей проблемой:
создал две сводные таблицы на одном листе
написал макрос который в зависимости от выбранной ячейки в первой, фильтры во второй (это требуется для отображения детализации значений - аналог если щелкнуть по значению два раза, для получения изначальных данных, но в нужном формате)
* по горизонтали в заголовке месяца, значения в таблице выдуманы и = месяцу (используется AVG). Номер месяца сделал специально чтобы видеть ошибку. макрос вставлен в исходный текст листа
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim numColumn&, numRow&
numColumn = ActiveCell.Column
actCell = ActiveCell.Value
numRow = ActiveCell.row
If numColumn < 14 And numRow > 5 Then
If Not IsEmpty(actCell) Then
On Error Resume Next
ActiveSheet.PivotTables("PartnersERR").PivotFields("month").CurrentPage = numColumn - 1
ActiveSheet.PivotTables("PartnersERR").PivotFields("name").CurrentPage = Cells(numRow, 1).Value
Else
ActiveSheet.PivotTables("PartnersERR").PivotFields("month").ClearAllFilters
ActiveSheet.PivotTables("PartnersERR").PivotFields("name").ClearAllFilters
End If
End If
End Sub
По идее, должно работать в рамках этих данных следующим образом:
щелкаю на любую ячейку со значением в первой, фильтр вы выводит во второй детализированные данные по партнеру и так как значение = месяц, то во второй в качестве значения delta должен быть аналогичное значение.
но проблема в том, что почему-то к примеру, вместо 5-ти выводится семь
и если щелкнуть по значению, то видно, что данные правильные, но месяц не пятый, а седьмой, то есть значения фильтра не соответствую значению таблицы. Сам файл находится по ссылке Файл на DropBox
При этом после нескольких открытий, в данных сводной появился какой-то 16-й месяц, хотя в самой таблице данных их нет. Обновления таблицы не помогают.
Я со сводными через макрос ранее не работал , может что-то не так делаю. ( но после макроса и руками фильтр уже не работает нормально). Аналогичная проблема была ранее замечена и в других фалах, но это были попытки сделать сложные дашборды с очень большим количеством информации и большим количеством сводных таблицами на одном листе, которые также были еще связанны общими срезами , поэтому подразумевал, что там что-то намудрил и забросил это дело, но сейчас решил использовать макрос в простенькой задаче, и опять заметил эту ошибку с ошибкой работы фильтра. Буду признателен, если кто подскажет, где искать проблему или как ее решить. (после удаления сводной и повторного создания, проблема опять появляется, но могут не правильно фильтроваться уже другие месяца). Рисунки удалены: превышение допустимого размера вложения [МОДЕРАТОР]
Здравствуйте ozand. Не знаю как это происходит и как правильно лечить. Но при таком глюке я просто удаляю этот фильтр, обновляю таблицу. В параметрах таблицы в Данных против "Число элементов сохраняемых для каждого поля" ставлю Нет (может это и не к чему). Потом вновь ставлю этот фильтр. Мне кажется это помогает. Пробуйте. По неизвестной причине данные фильтра переименовались. В таблице нет цифр 16, а в фильтре есть.
Спасибо Вам, я так до этого и поступал, но к сожалению почему-то каждый раз ситуация повторяется снова. И я для примера взял простой файл, как я писал, я пытался использовать макрос и сводные для создания динамичного дашборда, где сводных на одном листе с фильтрами достаточно много + сводные с форматированием и большим количеством переменных, а фильтры начинают неправильно работать очень быстро (+ там очень трудно понять что данные не корректные). Я сутки копался в интернете, но почему-то не смог найти не в ru, ни в eng ни чего по этой теме.
А почему Вам "numColumn - 1" не заменить на "actCell", тогда не будет фильтр зависеть от столбца, Ведь если нет одного из данных, то макрос ищет по номеру столбца, а номер столбца не совпадает с цифрой в активной ячейке,этой цифры нет в фильтре и происходит переименование. имхо.
относительно этой таблицы, значение в ячейке первой сводной, в реальной таблице, это сумма разницы между двумя показателями (сток расчетный и сток заявительный), а не число совпадающее с номером месяца, для примера я просто сделал не эту дельту, а номер месяца, чтобы можно было наглядно заметить неадекватное поведение сводной (значение в первой сводной AVG , для того, чтобы если по партнеру больше чем 1 марка, то значение не суммировалось, а показывало номер месяца - опять же для наглядности).
суть таблиц, использованной для примера с реальными данными, в первой сводной - сумма расхождения стоков по партнерам в рамках каждого месяца.Чтобы понять, из чего эти расхождения получаются и по каким маркам, я сделал макрос который передает во вторую сводную
"numColumn - 1" - номер месяца (так как месяца начинаются со второго столбца) "numRow" - номер строки в которой указано названия партнера Cells(numRow, 1).Value
если этих фильтров не будет, то данные во второй не смогут формироваться. я могу переписать макрос, который будет аналог двойного щелчка по ячейке сводной, когда показываются исходные данные для этого значения, и на основе его будет формироваться вторая сводная таблица, но если для этой таблицы где одна дополнительная сводная это в общем не проблема, то в случае большего количества, делать так совсем не удобно и при некоторых реализациях не возможна.
У меня уже интерес появился, почему так, и как можно это исправить, с учетом того, что я ни где не смог найти информацию о таком странном поведение сводных таблиц. Поэтому написал тут, так как был зарегистрирован. Если не найду ответа тут пойду дальше по ru форумам, потом на eng перейду (я на русском трудно объясняю, боюсь меня англоговорящие еще труднее поймут).
Сводные прекрасный инструмент, но мне как-то весь прошлый год, как только начинаю использовать макросы с ними, не везет. Постоянно какие-то сбои.
Распишу подробнее: макрос переписывает название фильтра если не находит в нем значение которое ему задано (№столбца), а в фильтре нет такого месяца. Для пробы откройте пример который выложен. В фильтре нет 7 месяца, при нажатии на 5- фильтрует 7, так как нет в фильтре 7 то при запуске макроса нажав на столбец 7 изменится фильтр с 5 переименуется в 7, теперь нет 5. Нажав на 6 фильтр сработает по 5 (потому что переименован), жмем на строку 5 - макросу деваться некуда он переименовывает 6 в 5, 6 пропала. Активируйте ячейку вне таблицы, установите в фильтре все, далее активируйте ячейку в 6 столбце. Все встало на свои места. Так как фильтр у Вас по месяцам предлагаю данные для фильтра брать из строки 4, там всегда есть те-же месяца что и в фильтре. Например так
Код
numColumn = Cells(4, ActiveCell.Column).Value
А в "numColumn-1", -1 убрать. Это чисто мои наблюдения, потому что сам на этом попадался.
спасибо вам! я сейчас вас понял, и ранее пытался искать в этом направление, но меня сбивало, возможно, уже испорченные данные в фильтре (как в изначальном примере этой таблицы был 14-й месяц и т.п. или просто не возможность найти закономерность, так как работал с реальными данными). Я на днях поэксперементирую с таблицами, и отпишусь вам с благодарностью, если все получится. хотя я уже сейчас думаю, что ваша описанная логика, единственная логичная в этом примере. в любом случае, еще раз спасибо за оказанное внимание.