Автор: romaxone
Дата сообщения: 29.12.2005 19:06
Прошу всех набраться терпения и прочитать эту информацию (постарался описать как можно подробнее). Задача следующая:
Необходимо обобщить данные о смете расходов подведомственных организаций (всего 30). Сбор данных осуществляется в виде excel таблиц (сразу оговорюсь, что форма типовая, абсолютно идентичная по составу для всех отчитывающихся организаций и изменяться не может). Данные таблицы содержат как не защищенные ячейки, которые заполняются вручную, так и защищенные, которые содержат формулы итогов, подитогов и т.д. Отчеты собираются на произвольную дату, файлы сохраняются в подкаталогах с именем, удовл. шаблону ДДММГГГГ (например: 20122005). Сводная таблица представляет собой файл той же структуры, что и собираемая отчетность. Для получения свода я написал макрос осуществляющий связывание сводного файла со всеми 30-ю таблицами. Связывание осуществляется путем прописывания формулы суммирования в каждую ячейку сводного файла (т.е. сводный файл A1 = файл1 А1 + файл2 А1 + … + файл N А1).
А вот теперь о проблемах, с которыми я столкнулся при создании этого макроса.
Поскольку файлы, собираемые на разные отчетные даты имеют одинаковые имена и идентифицируются лишь по имени подкаталога, то первоначально при написании макроса в суммирующую формулу включать полный путь к каждому файлу, но при попытке записать полученную формулу в ячейку всякий раз появлялось сообщение “out of memory” (мало памяти). После многочисленных попыток от этой идеи пришлось отказаться. Второй подход заключался в следующем. Перед началом связывания выполняется переход в каталог, в котором находятся файлы отчетности, а формула формируется с использованием только имен файлов (без полного пути). Алгоритм оказался работоспособным, но как всегда не без сюрпризов. А именно поведение его оказалось крайне не стабильным, нередко не смотря на явный переход в один каталог в итоге оказываются связанными данные из другого каталога (на прежнюю отчетную дату), а иногда и того смешнее – формула содержит файлы из разных каталогов, как правило первый файл из заданного, а остальные из предыдущего. Я понимаю это похоже на мистику, но увы многочисленные эксперименты доказали, что это так. Причем алгоритм достаточно устойчиво работает под Office XP, и гораздо хуже под Office 2000. А может VBA это и вовсе не язык программирования, только по долгу службы приходится иметь дело с Excel таблицами и обрабатывать их соответственно.
Прошу всех, кто занимался подобными задачами и сталкивался с подобными проблемами откликнуться. Приветствуются все советы, а также информация о тонкостях связывания большого числа файлов в Excel (в частности программного).