新手程序员在这里。我有一个代码,可以从服务器复制12小时的数据,并在excel中显示。我的代码获取显示的代码并将其导出到一个文件中,每12小时附加一次,这样我就可以获得数月的数据。
我的问题是,20天左右后我的内存耗尽。从理论上讲,它不应该比原始程序获取更多的数据,并且在20天后内存耗尽对我说内存泄漏。在一个旧的java程序中,我只是用一些频率调用了垃圾收集器,问题就消失了。有没有办法在excel-vba中这样做?我已经阅读过关于将变量设置为空的内容,但我有很多变量,我认为真正的问题与将所有读入数据存储为ram有关,我不知道如何将其设置为零。
其他奇怪的一点 - 由于内存而崩溃后我无法在不关闭excel的情况下再次启动程序。崩溃后它不会删除内存中的东西吗?
感谢您的帮助
答案 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没有传统意义上的垃圾收集 - 所以你的特定查询的答案是否定的 - 但保留了引用的数量。因此,为了释放内存,您需要按照建议进行操作,并在不再需要时取消引用它们。