当我(手动)打开 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
最佳答案
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 实例可能会尝试显示您没有看到的通知/提示。
关于vba - GetObject 方法引发 429 错误,但任务管理器显示 Excel.EXE 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23916548/