GetObject方法引发429错误,但任务管理器显示Excel.EXE图像

时间:2014-05-28 16:00:48

标签: vba excel-vba powerpoint-vba excel

当我打开Excel(手动)时,我收到“我的Personal.xls已被”其他用户“使用的警告。这表明有一个Excel进程正在运行。我在任务管理器上确认了这一点 - Excel确实正在运行。

所以我把一个快速子组合在一起尝试关闭它,这个程序在Set x = GetObject(, "Excel.Application")上引发了429错误。

Sub QuitExcel()
Dim x As Object
Set x = GetObject(, "Excel.Application")
x.Quit
End Sub

问题:为什么GetObject方法失败?

Excel似乎正在运行,如任务管理器所示,以及从任务栏打开Excel时显示的警报。

从评论中更新

Jean-Francois建议使用路径名,因为警报表明我的Personal.xls有问题,我使用该路径。不过,我不确定这是否有效。当我这样做时,我仍然在任务栏中看到Excel.EXE图像。

Sub GetExcel()
Dim x As Object
On Error Resume Next
    Set x = GetObject(, "Excel.Application")
    x.Quit
    Exit Sub
If Err Then
    Set x = GetObject("C:\Users\david_zemens\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.xls")
End If
On Error GoTo 0
x.Parent.Visible = True
x.Parent.Quit


End Sub

1 个答案:

答案 0 :(得分:1)

Personal.xls(或Excel 2007+上的Personal.xlsb)不包含工作表,如果没有进入VBA编辑器,可能无法在Excel中看到。如果您在Excel打开时没有任何您希望持续访问的已保存宏,则可以从%appdata%\ Microsoft \ Excel \ XLSTART 文件夹中删除Personal.xls *文件。否则,终止不可见Excel实例的最快捷最简单的方法是使用shell /命令提示符/ RUN命令。

在VBA中:

Shell "taskkill /f /im Excel.exe"

在运行/命令提示符中:

taskkill /f /im Excel.exe

注意:这将在每个运行的Excel实例上强制关闭 - 包括运行宏的实例。正如其他人暗示的那样,另一个Excel实例可能正试图显示您没有看到的通知/提示。