Excel VBA - 内存不足错误(运行时7)

时间:2010-06-23 14:30:41

标签: excel vba lotus-notes

在excel中使用VBA时,我遇到了一个非常奇怪的错误。我正在使用LotusNotes Automation库来遍历视图并将所有内容写入单元格。

这是我的代码(不感兴趣的变量被删除,因为我知道它们不会导致问题)

Public Function 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

结束功能

因此, ALWAYS 在行= 1425且列为35时失败。它给出“内存不足”(运行时7错误)。它不是硬件,因为系统非常稳定(双核,2 gig ram)。它总是在同一行崩溃。

我进行了搜索,找到了一个相关的帖子: "Out of Memory" error in Lotus Notes automation from VBA

以前有人见过这样的事吗?

3 个答案:

答案 0 :(得分:1)

如果代码在视图中的同一文档和同一列上始终失败,那么这将使我相信该文档存在一些数据问题。您是否可以捕获错误并显示失败文档的一些唯一标识符?我会尝试这样做,然后查看该文档的视图的第35列并检查值。也许在view列中有一个返回@Error或类似的计算 - 然后导致VBA代码抛出内存异常。

答案 1 :(得分:0)

随机问题:

  1. 什么数据类型是行?如果将row定义为double,它是否仍会崩溃?

  2. 根据您引用的链接(实际上,谢谢。这是我的帖子),如果您将会话定义为静态变量,它是否仍会崩溃?

  3. 即使你没有做#2,你还记得在功能结束时关闭你的会话吗?

  4. 这看起来只是更大功能的一个子集。连续多次调用?

答案 2 :(得分:0)

我让公司在我的计算机上安装Excel 2007。完全没有问题地报告,所以我想它一定是2003年的内部错误。