小编use*_*542的帖子

退出后,Excel的VBA自动化在内存中留下一个进程

我已经看到了很多关于这个问题的建议,我已经尝试了所有这些,但似乎都没有.VBA代码位于非Microsoft产品(SAP Business Objects,这可能是问题).我创建了一个Excel对象:

Set oExcel = CreateObject("Excel.Application")

从特定工作簿中的某个工作表的第1列加载内容,然后关闭Excel.每次,它在内存中留下一个进程,占用5+ mb的内存.

我尝试使oExcel对象可见,这样至少我可以在不使用任务管理器的情况下杀死它,但是当我调用Quit时,UI退出,仍然离开了进程.

每次运行代码时,它都会创建一个新进程.所以我尝试通过调用重用任何现有的Excel进程

Set m_oExcel = GetObject(, "Excel.Application")

并且只有在该调用不返回任何内容时才创建它

这并没有扩散这些过程,但单个过程每次增长5+ mb,因此问题基本相同.

在每种情况下,我关闭我打开的工作簿,并在退出之前将DisplayAlerts设置为False:

m_oBook.Close SaveChanges:=False
m_oExcel.DisplayAlerts = False
m_oExcel.Quit
Run Code Online (Sandbox Code Playgroud)

这段代码已经使用了至少五年,但是在我们迁移到Windows 7之前,这个问题并没有出现.

如果它有帮助,这是完整的代码.请注意,所有Excel对象都是每个建议的模块级变量("m_"前缀),并且我已根据另一个建议使用了"一点"规则.我也尝试使用通用对象(即后期绑定),但这也没有解决问题:

Private Function GetVariablesFromXLS(ByVal sFile As String) As Boolean
    On Error GoTo SubError

    If Dir(sFile) = "" Then
        MsgBox "File '" & sFile & "' does not exist.  " & _
               "The Agent and Account lists have not been updated."
    Else
        Set m_oExcel = CreateObject("Excel.Application")
        Set m_oBooks = m_oExcel.Workbooks
        Set m_oBook = …
Run Code Online (Sandbox Code Playgroud)

excel vba

8
推荐指数
1
解决办法
2万
查看次数

标签 统计

excel ×1

vba ×1