VBA:内存不足因内存泄漏而导致错误....我可以手动调用垃圾收集吗?

时间:2011-09-27 09:55:31

标签: vba

新手程序员在这里。我有一个代码,可以从服务器复制12小时的数据,并在excel中显示。我的代码获取显示的代码并将其导出到一个文件中,每12小时附加一次,这样我就可以获得数月的数据。

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

其他奇怪的一点 - 由于内存而崩溃后我无法在不关闭excel的情况下再次启动程序。崩溃后它不会删除内存中的东西吗?

感谢您的帮助

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

VBA没有传统意义上的垃圾收集 - 所以你的特定查询的答案是否定的 - 但保留了引用的数量。因此,为了释放内存,您需要按照建议进行操作,并在不再需要时取消引用它们。