|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.03.2015, 08:48 | #1 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 248
|
Недостаток памяти
Доброго времени суток!
Столкнулся с проблемой при работе макроса - выходит ошибка "недостаточно оперативной памяти Excel". Пробовали запускать на трех ноутбуках - на двух подвисает, но все-таки работает (примерно 7 минут), на третьем, для которого написан макрос, и выходит эта ошибка. Установлен 10 офис, 32-разрядная версия, все лицензионное. Поискал в интернете - советуют поменять железо. Пробовал запустить макрос дома (комп мощный и 64-разрядная версия Excel), отчет формировался 20 минут. Суть работы проблемной части макроса - имеется таблица с данными по ЗП сотрудников (4000 строк), эта таблица копируется и вставляется на 12 новых листов (12 филиалов) , далее с этих 12 листов удаляются лишние данные по другим филиалам. Пробовал чистить буфер памяти - Application.CutCopyMode = False , не помогло Возможно, кто-то уже сталкивался с такой проблемы и нашел решение, буду признателен за совет! |
16.03.2015, 09:39 | #2 | |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
Цитата:
20 минут для 4000 строк - это ненормально, алгоритм нуждается в оптимизации. Почитайте например http://www.planetaexcel.ru/forum/ind...ITLE_SEO=55705
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
|
16.03.2015, 10:00 | #3 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 248
|
Спасибо за ответ!
Буду пробовать оптимизировать - это уже 4 вариант макроса |
16.03.2015, 10:53 | #4 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Вы бы выложили файл, - тогда и советы были бы более конкретные
PS: для обработки 4 тыс строк, обычно более чем достаточно 1-2 секунд. (если макрос правильно написан) |
16.03.2015, 11:09 | #5 |
Форумчанин
Регистрация: 27.10.2014
Сообщений: 248
|
Файл, к сожалению выложить не могу, т.к. он содержит конфеденциальную информацию. И вопрос был не по оптимизации кода VBA, а по настройкам Excel.
Вообще вроде бы решил вопрос копированием только нужной мне части листа ' копирование данных lLastRow = Worksheets("Выгрузка").Cells(Rows.C ount, 1).End(xlUp).Row ' Счетчик номера последней строки Sheets("Выгрузка").Select Range(Cells(1, 1), Cells(lLastRow, 25)).Select Selection.Copy ' вставка на листы For i = 3 To ThisWorkbook.Sheets.Count 'номер последнего листа в книге Sheets(i).Select Range("A1").Select ActiveSheet.Paste Next |
16.03.2015, 12:21 | #6 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
макрос тормозит по одной единственной причине, - он так написан настройки Excel тут ни при чём если нормально написать макрос (без использования слова Select, например), - макрос отработает за секунду, - и, разумеется, с нехваткой памяти никаких проблем не будет (такому макросу надо очень мало памяти) PS: проще переписать весь код «с нуля» |
|
16.03.2015, 12:24 | #7 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
Осталось селекты убрать
Код:
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Последний раз редактировалось Казанский; 16.03.2015 в 14:03. Причина: добавил точку перед Rows.Count |
16.03.2015, 12:33 | #8 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
А Rows.Count то может быть как 65536, так и миллион, как повезёт... Что может дать ошибку.
webmoney: E265281470651 Z422237915069 R418926282008
|
16.03.2015, 12:59 | #9 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Rows.Count - это константа, которая хранится в модуле класса. В зависимости от версии Excel она различна, но ошибки не будет.
Чем шире угол зрения, тем он тупее.
|
16.03.2015, 13:07 | #10 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Я сейчас проверить не могу (но помню что проверял ранее), но думаю что эта константа берётся от активного файла (или листа с кодом), а обрабатывать в этот момент можно файл другой версии.
Т.е. если активный будет xlsx, а обрабатывается xls - будет ошибка. Если наоборот - можно "не заметить" что и в 70к строках есть данные. В примере Казанского думаю будет ошибка, если код будет в модуле листа одной версии, а Worksheets("Выгрузка") будет другой версии. Конечно маловероятно, но возможно. Точки там не хватает.
webmoney: E265281470651 Z422237915069 R418926282008
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите найти ошибку ну или недостаток в программе | Литвачок | Visual C++ | 0 | 07.11.2013 20:51 |
Видюха 6600gt и недостаток ее питания | BlackOff_Max | Компьютерное железо | 11 | 27.02.2012 12:25 |
Недостаток в "Расчет средней оценки" | roxy7 | Microsoft Office Excel | 3 | 12.12.2011 13:21 |
Кольцевая очередь на массиве в статической памяти с элементами в динамической памяти | ]tach[ | Общие вопросы C/C++ | 1 | 19.01.2011 13:16 |
Недостаток информации | Квэнди | Свободное общение | 1 | 03.04.2007 16:23 |