Excel VBA - ошибка нехватки памяти (время выполнения 7)

Я получаю очень странную ошибку при использовании VBA в Excel. Я использую библиотеки автоматизации LotusNotes для циклического просмотра и записи всего в ячейку.

Вот мой код (не представляющие интерес переменные удалены, так как я знаю, что они не вызывают проблемы)

Открытая функция TimeCh()

Set session = New NotesSession 'create a new session (ask for user/pass)
session.Initialize             'initialize the session (allow login)
Set db = session.GetDatabase("HIDDEN") 'Grab the DB
Set view = db.GetView("HIDDEN") 'Get the view




Application.ScreenUpdating = False


'start the loop to go through data
While Not (entry Is Nothing)
    Cells(row, 1) = (entry.ColumnValues(4))
    Cells(row, 2) = (entry.ColumnValues(0))
    Cells(row, 3) = (entry.ColumnValues(26))
    Cells(row, 4) = (entry.ColumnValues(27))
    Cells(row, 5) = (entry.ColumnValues(22))
    Cells(row, 6) = (entry.ColumnValues(20))
    Cells(row, 7) = (entry.ColumnValues(29))
    Cells(row, 8) = (entry.ColumnValues(31))
    Cells(row, 9) = (entry.ColumnValues(30))
    Cells(row, 10) = (entry.ColumnValues(8))
    Cells(row, 11) = (entry.ColumnValues(7))
    Cells(row, 12) = (entry.ColumnValues(21))
    Cells(row, 13) = (entry.ColumnValues(19))
    Cells(row, 14) = (entry.ColumnValues(24))
    Cells(row, 15) = (entry.ColumnValues(25))
    Cells(row, 16) = (entry.ColumnValues(32))
    Cells(row, 17) = (entry.ColumnValues(28))
    Cells(row, 18) = (entry.ColumnValues(9))
    Cells(row, 19) = (entry.ColumnValues(12))
    Cells(row, 20) = (entry.ColumnValues(11))
    Cells(row, 21) = (entry.ColumnValues(23))
    Cells(row, 22) = (entry.ColumnValues(10))
    Cells(row, 23) = (entry.ColumnValues(2))
    Cells(row, 24) = (entry.ColumnValues(33))
    Cells(row, 25) = (entry.ColumnValues(1))
    Cells(row, 26) = (entry.ColumnValues(13))
    Cells(row, 27) = (entry.ColumnValues(5))
    Cells(row, 28) = (entry.ColumnValues(14))
    Cells(row, 29) = (entry.ColumnValues(6))
    Cells(row, 30) = (entry.ColumnValues(18))
    Cells(row, 31) = (entry.ColumnValues(16))
    Cells(row, 32) = (entry.ColumnValues(3))
    Cells(row, 33) = (entry.ColumnValues(15))
    Cells(row, 34) = (entry.ColumnValues(17))
    Cells(row, 35) = (entry.ColumnValues(34))
    row = row + 1
    Set entry = vec.GetNextEntry(entry)
Wend
Application.ScreenUpdating = True

Конечная функция

Таким образом, ВСЕГДА происходит сбой, когда строка = 1425, а столбец равен 35. Это дает «недостаточно памяти» (ошибка времени выполнения 7). Это не может быть связано с аппаратным обеспечением, потому что система очень стабильна (двухъядерный процессор, 2 гигабайта оперативной памяти). И он всегда падает в одной и той же строке.

Я выполнил поиск и нашел одну соответствующую тему: Ошибка нехватки памяти при автоматизации Lotus Notes из VBA

Кто-нибудь видел что-то подобное раньше?


person masfenix    schedule 23.06.2010    source источник
comment
Я могу сожалеть об этом, но вы можете показать всю процедуру?   -  person PowerUser    schedule 23.06.2010
comment
Это весь код. Если вы не хотите видеть определенные переменные (например, тусклые операторы)   -  person masfenix    schedule 23.06.2010
comment
На самом деле да. Я надеялся на определения переменных, а также строки Sub и End Sub, чтобы мы могли видеть, какие переменные являются внутренними и внешними. Я не имею в виду никаких решений, когда пишу это, но это может быть полезно.   -  person PowerUser    schedule 24.06.2010


Ответы (3)


Если код постоянно дает сбой в одном и том же документе и в одном и том же столбце в представлении, это наводит меня на мысль, что в этом документе есть какая-то проблема с данными. Можете ли вы отловить ошибку и показать какой-нибудь уникальный идентификатор неудавшегося документа? Я бы попытался сделать это, а затем посмотрел в 35-м столбце представления этот документ и проверил значение. Возможно, в столбце представления есть вычисление, которое возвращает @Error или подобное, и, в свою очередь, заставляет код VBA вызывать исключение памяти.

person Ed Schembor    schedule 23.06.2010
comment
Компания установила на мой компьютер Excel 2007. Прогнал отчет без проблем, так что я предполагаю, что это внутренняя ошибка 2003 года. - person masfenix; 23.06.2010
comment
Эд прав. Можете ли вы проверить, что данные документа действительны? - person PowerUser; 24.06.2010

Случайные вопросы:

  1. Какой тип данных является строкой? Если вы определяете строку как двойную, она все еще падает?

  2. По ссылке, которую вы процитировали (на самом деле спасибо. Это был мой пост), если вы определяете сеанс как статическую переменную, он все равно падает?

  3. Даже если вы не сделаете № 2, не забудете ли вы закрыть сеанс к концу функции?

  4. Это выглядит как подмножество гораздо большей функции. Сколько раз она вызывается подряд?

person PowerUser    schedule 23.06.2010
comment
1) Это строка. 2) Это не статично, но я попробую. 3) Даже не доходит до конца функции. 4) Он перебирает все документы, около 6000 из них. - person masfenix; 23.06.2010
comment
Компания установила на мой компьютер Excel 2007. Прогнал отчет без проблем, так что я предполагаю, что это внутренняя ошибка 2003 года. - person masfenix; 23.06.2010

Компания установила на мой компьютер Excel 2007. Прогнал отчет без проблем, так что я предполагаю, что это внутренняя ошибка 2003 года.

person masfenix    schedule 23.06.2010