Вот, нарвался на глюк. Может кому поможет. Беглый поиск по форуму явных аналогов не выявил, но если не так - не судите строго.
Ситуация достаточно типичная - после формирования силами VBA сводной таблицы и вставки на ее же место ее же значений возникает потребность заполнить пустоты полей области строк. Это делается заполнением всех пустот формулой, которую я называю "см.выше" (т.е. значение поля надо продублировать вниз на все строки этого поля - пока не встретится новое значение по данному полю). Это приводит наполнение сводной таблицы в нормализованный вид, пригодный для разного рода отчетов, ожидающих в каждой строке зоны данных увидеть заполненные данные в каждом столбце.
В общем вместо:
Код одолжен из книги, поэтому я был в нем уверен на все 100%:
Всё бы хорошо, но при загрузке большого объема данных формула глючит и заполняет не только пустоты, но и все ячейки данного столбца. В итоге он полностью заполняется самым верхним значением (или даже пустотой).
Глюк имел плавающий характер - данных 400 тысяч строк, импортированных из текстового файла, что и усиливало желание найти "левый символ"
. В итоге методом половинного деления за 2,5 часа я его вычислил с точность до 10 строк. А потом - хвать, а демонов то и нет. Заполнение этих строк любыми другими (даже из уже прошедших проверку частей) также приводит к сбою. Потом я воспользовался гулглом, и нашел описание данного глюка.
Вывод - гугл круче клоуна с половинным делением
, поэтому если ошибка не лечится за 20 минут - разумно потратить 2 минуты на погуглить. Ты понял, Леша? (это я себе
)
ЗЫ. Больше всего понравился статус глюка в базе данных Microsoft - прям вспоминается программистская байка - "если в вашей программе обнаружили глюк, не спешите его исправлять - позиционируйте его как уникальную особенность вашего программного продукта"
Ситуация достаточно типичная - после формирования силами VBA сводной таблицы и вставки на ее же место ее же значений возникает потребность заполнить пустоты полей области строк. Это делается заполнением всех пустот формулой, которую я называю "см.выше" (т.е. значение поля надо продублировать вниз на все строки этого поля - пока не встретится новое значение по данному полю). Это приводит наполнение сводной таблицы в нормализованный вид, пригодный для разного рода отчетов, ожидающих в каждой строке зоны данных увидеть заполненные данные в каждом столбце.
В общем вместо:
| Код |
|---|
Отдел А Иванов Петров Сидоров Отдел Б Власов Тарасов Кузьмин Получаем: Отдел А Иванов Отдел А Петров Отдел А Сидоров Отдел Б Власов Отдел Б Тарасов Отдел Б Кузьмин |
Код одолжен из книги, поэтому я был в нем уверен на все 100%:
| Код |
|---|
FinalReportRow = WSD.Range("R1048576").End(xlUp).Row
With Range("O2").Resize(FinalReportRow - 1, 1)
With .SpecialCells(xlCellTypeBlanks)
.FormulaR1C1 = "=R[-1]C"
End With
.Value = .Value
End With
|
Всё бы хорошо, но при загрузке большого объема данных формула глючит и заполняет не только пустоты, но и все ячейки данного столбца. В итоге он полностью заполняется самым верхним значением (или даже пустотой).
Глюк имел плавающий характер - данных 400 тысяч строк, импортированных из текстового файла, что и усиливало желание найти "левый символ"
Вывод - гугл круче клоуна с половинным делением
ЗЫ. Больше всего понравился статус глюка в базе данных Microsoft - прям вспоминается программистская байка - "если в вашей программе обнаружили глюк, не спешите его исправлять - позиционируйте его как уникальную особенность вашего программного продукта"