error 7 out of memory

Программирование на Visual Basic for Applications
kv17
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 06.02.2008 (Ср) 13:36

error 7 out of memory

Сообщение kv17 » 15.05.2008 (Чт) 11:03

задача:
есть большое кол-во (~7000) txt файлов, нужно содержимое этих файлов, по некоторым правилам, вставить в ячейки разных книг xls. размеры файлов небольшие, max~50 kb и по отдельности файлы вставляются нормально
при запуске программы, которая последовательно
-открывает и считывает по строкам нужный файл,
-записывает текст в некоторую ячейку
-закрывает файл
где-то на 30-40 шаге вылетает ошибка "error 7 out of memory"

если кто догадывается что это и как это решить, подскажите буду очень благодарен

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 15.05.2008 (Чт) 11:18

Если до вылета ошибки проходит "30-40 шагов" то попробуй расставить точки останова и выполнить код пошагово.
Определи строку кода и строку текстового файла на которой вылетает ошибка.
Утро добрым не бывает!

kv17
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 06.02.2008 (Ср) 13:36

Сообщение kv17 » 15.05.2008 (Чт) 11:52

пробовал
даже пробовал на месте ошибочного файла ставить другой файл.
судя по всему причина ошибки с этим не связана.

в цикле производится
-открытие txt файла
-считывание и копирование текста в ячейку
-закрытие txt файла
ошибка вылетает при записи текста в ячейку
причем "руками" ошибочный файл записывается нормально

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 15.05.2008 (Чт) 11:54

код в студию с указанием строки на которой валится.
Утро добрым не бывает!

kv17
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 06.02.2008 (Ср) 13:36

Сообщение kv17 » 15.05.2008 (Чт) 12:07

Код: Выделить всё


'названия файлов прописаны в ячейках ActiveSheet.Cells(str_num, 2)
root_path = ActiveWorkbook.Path & "\"

str_num = 2

Do While ActiveSheet.Cells(str_num, 1).Value <> ""

articul = ActiveSheet.Cells(str_num, 2).Value

If articul = "" Then GoTo next_str


If Not fs.FileExists(root_path & "verba_techinfo\" & articul & ".txt") Then GoTo next_str


' On Error GoTo next_str
Open root_path & "verba_techinfo\" & articul & ".txt" For Input As #1

line_ = ""
  Line Input #1, line_
 
Do While Not EOF(1)
Line Input #1, line_

 
'On Error GoTo next_str
ActiveSheet.Cells(str_num, 5).Value = ActiveSheet.Cells(str_num, 5).Value & line_
skip:
Loop

next_str:
Close #1
str_num = str_num + 1
Loop

kv17
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 06.02.2008 (Ср) 13:36

Сообщение kv17 » 15.05.2008 (Чт) 12:09

валится на строке
ActiveSheet.Cells(str_num, 5).Value = ActiveSheet.Cells(str_num, 5).Value & line_

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 20.05.2008 (Вт) 10:08

7000 файлов по 50К, это само по себе 350М памяти. Причем это чистые данные, без учета накладных расходов, которые будут затрачены на организацию самой структуры хранения. Запомним это число.



Теперь представим себе, что строка

Код: Выделить всё
ActiveSheet.Cells(str_num, 5).Value = ActiveSheet.Cells(str_num, 5).Value & line_


повторяется в цикле, и каждый раз Excel сохраняет undo/redo history для каждого изменения.



А теперь подумаем, сколько памяти все это потребует?
I don't understand. Sorry.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 114

    TopList