Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2010, 02:49   #1
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
Вопрос Проблема сохранения больших массивов на лист

Мне нужно обработать данные в ранге из примерно 60000 ячеек.
Я читаю их в массив обрабатываю и сохраняю обратно
Код:
.....
'iLastRow = 60000
'iCol = 2
Set r = .Range(.Cells(2, iCol), .Cells(iLastRow, iCol))
ReDim AA(1 To r.Rows.Count, 1)
AA = r.Value
'..............
'Тут полученный массив строк обрабатывается
'регулярными выражениями
'..............
r.Value = AA
Код выполняется в Excel 2003. Размер файла около 190Mb
Cкорость чтения в массив и обработки: 1-2 секунды - устраивает.
Но при сохранении на лист возникает следующий глюк:
Форма с которой запускается этот код на какое то время становится
белой и/или исчезает с экрана. В её заголовке на доли секунды появляется сообщение
Приложение не отвечает. Затем, форма несколько раз перерисовывается со сдвигом. И в конце концов отрисовывается правильно.
Клиент сильно нервничает от этих визуальных эффектов.
Перед приведённым фрагментом выполняется код
Код:
    With Application
        .EnableEvents = False
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With
    ActiveWorkbook.EnableAutoRecover = False
Если закомментировать r.Value = AA или уменьшить количество строк до
10000 - всё нормально
Я выкрутился обработкой в цикле чтение/запись по 10000 строк.
Есть ли другие идеи ?
Сменить версию Excel или использовать БД не могу по условиям клиента.
OS Windows 7, 4Gb RAM, CPU Intel Core2DUO E8400 @ 3.0 Ghz
Aent вне форума Ответить с цитированием
Старый 06.11.2010, 03:04   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Я бы попробовал перед записью массива на лист:

1) включить обновление экрана application.ScreenUpdating = true
или
2) временно скрыть Excel ( application.visible = false)

Кроме того:
3) поискать проблему в своём файле (для проверки удалив из файла всё лишнее, особенно условное форматирование)
4) протестировать код на других компах с Excel2003

Я для проверки сделал пример - при проверке описанный вами эффект не наблюдается
(вы обрабатываете только один столбец - 60000 ячеек, или несколько столбцов - 60000*N ячеек?)

Цитата:
Форма с которой запускается этот код на какое то время становится
белой и/или исчезает с экрана. В её заголовке на доли секунды появляется сообщение
Приложение не отвечает. Затем, форма несколько раз перерисовывается со сдвигом. И в конце концов отрисовывается правильно.
Много раз делал подобный код - с такими же объёмами данных.
Такой проблемы не встречал. (WinXP_32bit, Excel2003)
Вложения
Тип файла: rar test.rar (381.1 Кб, 10 просмотров)
EducatedFool вне форума Ответить с цитированием
Старый 06.11.2010, 03:43   #3
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Спасибо, Игорь.
На Вашем файле эффект не проявляется. Но мой размером ~180Mb
Обрабатываю я один столбец. Условного форматирования нет. Помимо обрабатываемого в файле ещё 5 столбцов с данными.

Эффект воспроизводим на разных компах/OS.
По всей видимости эффект проявляется только на больших файлах.

В итоге: Помогло указание Application.Visible = False
Ещё раз - большое спасибо.
Aent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование строк таблицы по условию одной ячейки из Лист 1 в Лист 2 Людвиг Microsoft Office Excel 5 25.10.2014 11:46
Проблема загрузки/сохранения StingList в файл Dj_SheLL Общие вопросы Delphi 7 26.04.2010 14:46
Проблема с загрузкой больших файлов на сервер. Air PHP 6 03.02.2010 19:50
Проблема отрисовки больших графиков call_me_Frank Компоненты Delphi 5 30.11.2009 10:23
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10