2011-09-27 34 views
0

新手程序员在这里。我有一个代码从服务器复制了12小时的数据并将其显示在excel中。我的代码获取显示的代码并将其导出到一个文件中,每12小时添加一次,这样我就可以拥有数月的数据。VBA:内存不足错误,由于内存泄漏....我可以手动调用垃圾收集?

我的问题是,20天左右后,我用完了内存。从理论上讲,它不应该比原始程序占用更多的数据,并且在20天之后内存用完会告诉我内存泄漏。在一个老的java程序中,我只是用一些频率调用垃圾收集器,问题就消失了。有没有办法在excel-vba中做到这一点?我已经读过有关将变量设置为无效的内容,但我有很多变量,我认为真正的问题与它将所有读入数据存储为ram有关,而且我不知道如何将其设置为零。

其他奇怪的位 - 在它因内存崩溃后,我无法再关闭excel而再次启动程序。所以崩溃后它不会删除内存中的东西?

感谢所有帮助

回答

1

据我理解你的问题,您的Excel程序仍在运行,并保持每天开放(这是我从跑步after 20 days理解)。

使用Set myVar = Nothing仍然是一种最佳做法,但假设您不想这样做。

我能想到的是创建一个新的Excel实例来运行你的代码并在运行代码结束时关闭你的应用程序。

喜欢的东西:

'Don't forget to add the reference .. 
'Microsoft Excel X,X object library 

Sub myTest() 
Dim xlAPp As New Application 

' your code 

Set xlApp = Nothing 
End Sub 
+0

对不起,感谢您的帮助,JMax。我二十天的含义是,我一次只能复制12小时的数据,20天之后数据或系统崩溃。这是没有意义的,因为我在复制剩余的数据之前删除了12小时的数据。所以每次迭代都不应该使用比我看来的最后一次更多的内存。但大约40个周期后,我的记忆力消失了。 感谢您的任何帮助 –

+0

要清楚它运行约45分钟左右才会崩溃。 –

+0

然后,没有*相关*代码,我看不出我们如何能够帮助你。为了在每次运行中抓取10天左右的数据,您应该更多地分割代码。顺便说一句,内存问题可能来自其他地方,你应该告诉我们什么是你遇到的错误(正如Issun指出的那样) – JMax

1

VBA没有传统意义上的垃圾收集 - 这样的答案,您的特定查询是没有 - 但保持引用计数。因此,为了释放内存,您需要按照您的建议进行操作,并在您的对象不再需要时解除引用。

相关问题