Страницы: 1 2 След.
RSS
Недостаточно ресурсов памяти - как открыть файл?
 
Уважаемые знатоки,
месяц я работал над очень сложным и объёмным файлом с очень сложными формулами привязанными к примерно 50-ти умным таблицам на разных листах.
Основная таблица так же "умная" и имеет размер порядка 100 столбцов на 15000 строк, где в каждой ячейке очень сложная формула.

И вот работал я над табличкой 300кб... и решил протянуть формулы на 15000 строк вниз (в этом и есть вся задумка файла изначально). Нажал сохранить и закрыл (файл получился размером 85мб... в последующем когда буду внесены все данные он будет весить порядка 150мб)

И теперь не могу его открыть - вообще никак. Пишет что недостаточно ресурса памяти - пытался открыть на 5 разных компьютерах - в том числе и с ССД и 16гб озу.

Как его открыть? Спасите кто-нибудь... Возможно причина именно в огромной умной таблице, из-за которой файл стал так много весить. Хочу открыть и перевести умную таблицу в обычную... но как открыть???
Изменено: DivineSoul - 13.05.2016 11:49:42
 
Цитата
DivineSoul написал:
файл получился размером 85мб.
:qstn: :qstn: :qstn: Зачем?????
Вполне такой нормальный кинжальчик. Процентов на 100
 
Доброе время суток
Версии Excel, а главное разрядность (32 или 64бит), на компьютерах, где пытались открывать файл - какие?
 
64 бита везде
Все версии ОС лицензионные
Софт тоже везде лицензионный
 
Цитата
китин написал:
  Зачем?????
Я сам не понимаю почему он такой большой получился - 100% из-за умной таблицы. Т.к. у меня есть файл где данных в 4 раза больше, и файл весит 45мб.
Собственно этот "новый" файлик и создавался, для того, чтобы уменьшить размер файла... а в итоге он ещё и в 2 раза больше весить стал...
 
Попробуйте открыть с отключенным пересчётом формул.
 
Странно это, если 64 да при таких объёмах ОЗУ. Попробуйте, вдруг макрос поможет
Код
Public Sub OpenBook()
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    Workbooks.Open "d:\path\filename.xlsx", False, True, CorruptLoad:=xlNormalLoad
End Sub

Естественно, поменяйте путь и имя файла на свой. Поиграйтесь с вариантами CorruptLoad
P. S. Если файл откроется и получится его вернуть в исходное состояние, то  не забудьте потом включить события Application.EnableEvents = True и автовычисления Application.Calculation = xlCalculationAutomatic.
 
Цитата
Hugo написал:  открыть с отключенным пересчётом формул.
как?
 
кнопка цитирования не для ответа [МОДЕРАТОР]

Цитата
Андрей VG написал: вдруг макрос поможет
Я очень не дружу с макросами...
Да и смысл именно в том, что я не могу открыть файл... вообще... он просто на середине загрузки выдаёт ошибку с недостатком ресурсов и всё...
Изменено: DivineSoul - 13.05.2016 11:50:59
 
Цитата
DivineSoul написал: как?
как в #7 - макрос можете прописать в др. (новой) книге - для открытия файла из указанного пути
p.s.
цитату из предыдущего поста сократите или уберите
(пока не пришли модераторы и не закрыли тему ввиду неисполнения Правил форума)
Изменено: JeyCi - 11.05.2016 10:13:59
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
DivineSoul написал: как?
Можно и вручную - в настройках отключить пересчёт, пробовать открыть файл.
 
Цитата
Андрей VG написал: не забудьте потом включить события Application.EnableEvents = True и автовычисления Application.Calculation = xlCalculationAutomatic
только один вопрос:
когда мы это всё потом включаем (например, макросом или ручками) - делает ли xl авто-пересчёт в окончании работы макроса или, если ручками, сразу в момент выставления нужной галки?..
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Доброе время суток.
Цитата
JeyCi написал:
делает ли xl авто-пересчёт в окончании работы макроса или, если ручками, сразу в момент выставления нужной галки?..
По идее не должен. Файл уже открыт, событие обновления/вычисления по факту открытия книги было пропущено. Мы просто меняем состояние режима вычислений. Но это мои догадки - надо бы как-то проверить.
 
По вычислениям: автоматически режим не возвращается в исходное состояние(автопересчет) после окончания макроса.
Этот параметр автоматически меняется только в одном случае: если в текущем сеансе установлен автопересчет формул и мы открываем файл, для которого был перед сохранением установлен ручной режим. В этом случае непременно будет отключен автопересчет для всех открытых книг, т.к. параметр этот распространяется на приложение полностью, но хранится отдельно для каждой книги. Если же изначально установлен пересчет ручной и после этого была открыта книга с автопересчетом - то произойдет действие ровно до наоборот - книге с автопересчетом будет установлен ручной режим пересчета формул.

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

Цитата
JeyCi написал: если ручками, сразу в момент выставления нужной галки?
в этом случае будет произведен немедленный пересчет всех формул во всех книгах при условии, что в книге зафиксировано изменение каких-либо значений после открытия файла или есть летучие формулы.
Изменено: The_Prist - 13.05.2016 11:51:24 (исправлены мелкие опечатки)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
ой, туплю сегодня по страшному (то ли жизнь такая, то ли, действительно, торможу, вместе с моим файлом)...
вобщем, по факту (можно сказать проверки): макросом перед закрытием выставляю xlManual, соответственно, открывается потом быстрее обычного, в файле есть куча макросов для работы, которые всё равно прогоняются для подгрузки новой инфо для работы далее... поэтому макросы всё-равно включат (там прописано) xlAutomatic...
поэтому возник вопрос: то ли всё немного подвисает (пока прогоняются все макросы) (?) из-за того, что макрос включает пересчёт и xl пересчитывает сразу на месте (проверить долго, макросов много друг за другом автоматом - долго вспоминать что где) или всё-таки в самих макросах дело...
просто есть 1 лист с множеством формул массива... и если открывать с ручным пересчётом - открывается нормально... а если потом руками ставить пересчёт на авто - то тоже зависает немного (задумывается, пока не пересчитает этот лист - выявлено, что проблема именно с этим листом)...
вот и думаю, зависание в работе макросов может не связано с макросами, а с включением в конце xlAutomatic?.. знает ли кто-нибудь однозначно? (просто ещё столько всего ковырять для оптимизации  :()
Изменено: JeyCi - 12.05.2016 10:44:19
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
зависание в работе макросов может не связано с макросами, а с включением в конце xlAutomatic?.
Так можно ведь таймером посмотреть и вывести в окно отладки время.
 
Цитата
JeyCi написал: знает ли кто-нибудь однозначно?
ну как можно однозначно что-то сказать по конкретному файлу и коду, не видя его? :)

Проверить легко: закомментируйте все строки в макросе, отвечающие за включение автопересчета. Если скорость вернется - дело только в формулах. Если нет - значит код медленный. Вот и всех делов.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Hugo написал: Так можно ведь таймером посмотреть
:D засекала секунды на часах на стене ~ 27 секунд открывался файл с пересчётом "авто"... и если  открыть с пересчётом ручным и выбрать руками авто (галку) ~27 сек зависание тоже (пока не пересчитается этот лист)
p.s. может и макросы так страдают пока работают?.. просто не хочется лезть проверять их все на включение xlManual-xlAutomatic (модулей достаточно - друг за другом)... если кто-нибудь знает и так (как у них там с пересчётом - пересчитывают ли сразу после строки xlAutomatic)
Изменено: JeyCi - 12.05.2016 11:23:16
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал: пересчитывают ли сразу после строки xlAutomatic
так я же написал выше все развернуто. Или все же непонятно? Что именно?
Цитата
The_Prist написал:
Цитата
JeyCi написал: если ручками, сразу в момент выставления нужной галки?
в этом случае будет произведен немедленный пересчет всех формул во всех книгах при условии, что в книге зафиксировано изменение каких-либо значений после открытия файла или есть летучие формулы.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал: при условии, что в книге зафиксировано изменение каких-либо значений после открытия файла
вот это не понятно... макрос(ы) в начале отключает(ют) всё, потом включает(ют) всё... и гонятся друг за другом (отключение-включение в каждом)... в моменты окончания каждого макроса - они фиксируют изменения?? (которые для них становятся тригером на пересчёт)... т.е. промежуточно между ними (всеми) возникает пересчёт этого сумасшедствия?
Изменено: JeyCi - 12.05.2016 11:24:00
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Изменения фиксируют НЕ МАКРОСЫ, а Excel. Если Вы макросом или вручную внесли хоть какое-то изменение на листах(да даже просто нажали F2-Enter) в промежутке между отключением автопересчета и включением - то включение автопересчета спровоцирует пересчет всех формул для тех книг, где были зафиксированы изменения.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
JeyCi написал: засекала секунды на часах на стене
я предлагал не на стене, а в окне отладки :)
Т.е. выводите значение таймера до включения пересчёта и после. Как вариант - посчитать разницу и показать месиджбокс.
Изменено: Hugo - 13.05.2016 11:52:24
 
Цитата
The_Prist написал: то включение автопересчета спровоцирует пересчет всех формул для тех книг, где были зафиксированы изменения.
спасибо, пошла думать, что происходит при выходе из одного макроса (где отключение - в конце включение) в другой (где ТОЖЕ отключение - в конце включение) ?
P.S.  :)
Цитата
Hugo написал: я предлагал не на стене, а в окне...
 Hugo - это уже на макросах... а на стене - даже без них на открытие и пересчёт...
про взаимопереплетение модулей и макросов написала - надеялась, что не придётся лезть в эти дебри  :( (хоть с таймером, хоть без) - когда милисекунды не помогут (а только десятки секунд)
но всё равно сделала, на всякий случай, - спасибо Hugo
Код
Dim timet
timet = Timer
With Application: .ScreenUpdating = False: .EnableEvents = False: .DisplayAlerts = False: .Calculation = xlManual: End With
'..................
With Application: .ScreenUpdating = True: .EnableEvents = True: .DisplayAlerts = True: End With     '.Calculation = xlAutomatic:

MsgBox Timer - timet & " сек." & vbNewLine & vbNewLine & " done.", 64, "MACROS done"
Изменено: JeyCi - 12.05.2016 17:02:33
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
при выходе из одного макроса (где отключение - в конце включение) в другой (где ТОЖЕ отключение - в конце включение) ?
Получается, чсто пересчёт будет происходить многократно. Тогда лучше в первом (или в главном, который запускает все остальные) макросе выключить, а в последнем включить )) Ведь они у Вас выполнятся последовательно?  
 
Цитата
Юрий М написал: Ведь они у Вас выполнятся последовательно?
иногда с выходом друг в дружку через Call...
вот пытаюсь (сделала - в 2 раза ускорилось - завтра проверю - спасибо, The_Prist)
Цитата
The_Prist написал: легко: закомментируйте все строки в макросе, отвечающие за включение автопересчета. Если скорость вернется - дело только в формулах.
- но иногда пересчёт формул приходится включать, чтобы макросы далее работали с обновлёнными данными...
да и макросы некоторые через ADO и что-то тянется из net'а (зависимость от скорости трафика, предоставляемой провайдером + наверно, от самого сайта)... и книга потом переименовывается программно и рвутся все связи и настраиваются на книгу саму себя... - тоже время (на создание подключений)... вот и думаю, за счёт чего можно увеличить скорость и убрать какие тормоза... (просто долго будет все формулы массивные переводить в макросы, да и макросов уже много...
Вобщем, пока по результатам попыток - вероятно дело не в макросах, ничего сильно не меняется (наверно, особо негде убрать лишний пересчёт - есть только нужные)... поэтому останусь при мыслях о 2х вариантах, оставшихся, по оптимизации:
а) найти способ не менять название файла, а историю собирать др путём (просто разрывая связи и сохраняя под именем даты
б) сделать промежуточную таблицу (уже сокращённую выборку по нужным критериям), а массивные формулы, чтобы тянули из неё, а не из общей базы (бОльшей по размерам) - просто критерии на отбор запихивала в массивные формулы + др. вычисления... но по этим критериям, видимо, лучше изначально настроить query - для отбора... а уже потом по отобранному - формулы массива для расчётов... наверно, и открываться начнёт не ~27 секунд
буду пробовать... спасибо большое за идеи  :idea:
Изменено: JeyCi - 12.05.2016 18:42:11
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
DivineSoul написал:
64 бита везде
64 бита не windows, а office должен быть
 
The_Prist, Дмитрий, спасибо за разъяснения по поводу переключения режимов пересчёта.
 
Цитата
kalbasiatka написал: 64 бита не windows, а office должен быть
Добрый день! Если более точно, то и то и другое должно быть 64-битным, так как для установки MS Office 64-bit требуется 64-битная операционная система.

А для счастливых обладателей 32-bit Excel 2016 в O365 build 16.0.6868.2060 (обновление от 3 Мая 2016г.для Office 365 for Windows) есть приятная новость от Microsoft:
1. При Windows 32 bit теперь Excel 32-bit поддерживается не 2, а 3 ГБайта памяти.
2. При Windows 64 bit и при Excel 32-bit поддерживается уже 4 ГБайта памяти.
Приятно еще и то, что аналогичное расширение памяти произошло и в VBA

Более подробно об этом можно почитать здесь - KB3160741 Large Address Aware capability change for Excel
Изменено: ZVI - 13.05.2016 04:51:58
 
Цитата
JeyCi написал:
но иногда пересчёт формул приходится включать, чтобы макросы далее работали с обновлёнными данными
Если есть возможность и знаете где надо пересчитать формулы, то можно принудительно кодом пересчитывать либо только нужные листы нужных книг, либо вообще только отдельные диапазоны:
Код
'пересчитываем весь лист книги book1.xls
Workbooks("book1.xls").Sheets(1).Calculate
'пересчитываем только диапазон А1:А20 на листе 1 книги book1.xls
Workbooks("book1.xls").Sheets(1).Range("A1:A20").Calculate
это будет быстрее в случае, если пересчитывать надо не все открытые книги, а только отдельные из них(либо отдельные диапазоны).
Изменено: The_Prist - 13.05.2016 09:23:01
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist. спасибо большое, так и сделала (там небольшие диапазоны пересчитать надо было по ходу работы макросов, остальное можно в конце один раз)... [просто свет отключали - голова кругом, что успела сохранить, что нет] - вроде восстановила, что смогла до вчерашнего вида - уже быстрее (как провела ревизию пересчётов)... осталось провести ревизию формул (или подхода, как 2 из #25)...  8) день убит потерей света  
Изменено: JeyCi - 13.05.2016 17:57:31
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Страницы: 1 2 След.
Читают тему
Наверх