2010-06-23 147 views
0

在Excel中使用VBA时出现非常奇怪的错误。我正在使用LotusNotes Automation库来遍历视图并将所有内容写入单元格。Excel VBA - 内存不足错误(运行时7)

这里是我的代码(不计利息的变量被删除,因为我知道自己是不是造成问题的原因)

公共功能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吉ram)。它总是在同一行崩溃。

我做了搜索,我发现有一个相关主题: "Out of Memory" error in Lotus Notes automation from VBA

有没有人见过这样的事?

+0

我可能会后悔,但你能展示整个程序吗? – PowerUser 2010-06-23 15:39:24

+0

这是整个代码。除非你想看到定义的变量(即暗淡的语句) – masfenix 2010-06-23 17:46:23

+0

其实,是的。我希望变量定义以及Sub和End Sub行,以便我们可以看到哪些变量是内部和外部的。我写这篇文章时没有任何解决方案,但可能会有所帮助。 – PowerUser 2010-06-23 20:25:09

回答

0

我让公司在我的电脑上安装Excel 2007。根本没有问题的报告,所以我想它一定是2003年的内部错误。

0

随机问题:

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

  2. 根据你引用的链接(感谢,其实是我的文章),如果你将会话定义为一个静态变量,它仍然会崩溃吗?

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

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

+0

1)它是一个字符串。 2)它不是静态的,但我会尝试。 3)甚至不能达到该功能的结束。 4)它遍历所有的文件,其中约6000。 – masfenix 2010-06-23 17:45:51

+0

我让公司在我的电脑上安装Excel 2007。根本没有问题的报告,所以我想它一定是2003年的内部错误。 – masfenix 2010-06-23 19:16:58

1

如果代码在视图中的同一文档和同一列上始终失败,那会导致我认为该文档存在某些数据问题。你能捕获错误并显示失败文档的一些唯一标识符吗?我会尽力做到这一点,然后查看该文档视图的第35列并检查值。也许在视图列中有一个返回@Error或类似的计算 - 并导致VBA代码抛出内存异常。

+0

我让公司在我的电脑上安装Excel 2007。根本没有问题的报告,所以我想它一定是2003年的内部错误。 – masfenix 2010-06-23 19:17:32

+0

埃德有一点。你能证实文件数据是有效的吗? – PowerUser 2010-06-23 20:26:58