创建运行 Excel 的不需要的后台进程

问题描述

这是我第一次向 Stack Overflow 发布问题。

我正在开发一个 Word 宏,作为其过程的一部分,在 Excel 工作簿中运行一个宏。据我所知,我的 Excel 宏中的代码按预期运行。我相信我的问题出在我的 Word 宏代码中,我在这里展示的代码片段完全取自该来源。

以下是 Word 宏代码的工作方式。它的代码首先确定 Excel 是否已打开(Excel 应用程序,而不是工作簿)。如果应用程序已经打开,我的代码会做一个注释并连接到它。如果没有打开,我的代码会打开一个新的 Excel 应用程序。然后它会打开一个新的启用宏的工作簿并运行其中嵌入的指定宏。当 Excel 宏终止时,控制权返回给我的 Word 宏。该宏首先关闭 Excel 工作簿(不是 Excel 应用程序)。然后我的代码测试 Excel 应用程序在 Word 宏启动时是否已经打开。如果是,则 Word 宏不执行任何操作;否则,它将关闭 Excel 应用程序。目标是让用户的计算机保持在我的 Word 宏运行之前的状态(至少对于打开的 Excel 应用程序而言)。

对于以下测试场景,我的代码未正确运行。我开始时没有打开 Excel 应用程序的实例(作为应用程序或作为后台进程);我通过任务管理器验证了这一点。然后我运行以下代码过程:

'initiate the Excel session
excelAlreadyRunning = True
'Determine if Excel is already running
On Error Resume Next
Set ExcelApp = Getobject(,"Excel.Application") 'if Excel is not open,this code line throws an error
                                                'is Excel is open,ExcelApp will point at it after
                                                'execution of this line of code
If Err.Number = APPLICATION_NOT_OPEN Then       'not already running - start it and make it visible
        excelAlreadyRunning = False
        Set ExcelApp = CreateObject("Excel.Application")
        ExcelApp.Application.Visible = True
        Err.Clear
    Else
        ExcelApp.Application.Visible = True
End If

代码按预期运行。我通过转到任务管理器来确认这一点。这段代码完成后,一个 Excel 应用程序打开了,并且没有后台进程运行 Excel。

Excel 宏终止后,我在 Word 代码中达到以下点:

'close the research tool
ExcelApp.ActiveWorkbook.Close SaveChanges:=False

'if Excel was not already running,close it and releases the resource
If Not excelAlreadyRunning = True Then
    ExcelApp.Application.Quit
    Set ExcelApp = nothing
End If
Exit Sub

当执行到达 Set ExcelApp = nothing 语句时,Excel 应用程序从任务管理器中消失,但我现在有一个运行 Excel 的后台进程,而我以前没有。我再次通过任务管理器确认这一点。这个正在运行的后台进程在我下次运行我的 Word 宏时会导致问题,因为它检测到一个已经在运行的 Excel 应用程序,而应该没有。

问题是 – 为什么会发生这种情况,我该如何解决?我想也许我的 Excel 宏中可能有一个打开的用户窗体,但我找不到任何证据。在这一点上,我看到的唯一解决方案是捕获打开的 Excel PID 并以这种方式关闭它。我宁愿冒着导致其他问题的风险不这样做。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...