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

标签 vba excel powerpoint

当我(手动)打开 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/

相关文章:

vba - 使用 Selenium Basic (VBA) 循环访问一组页面

vba - 修改用户表单以在多个工作表上工作

excel - 如何连续获得前 n 个非零值?

excel - #姓名? Excel 中的 VBA 函数错误

vba - 如何在 Visual Basic 中定义大型字符串列表

datetime - 将文本框文本设置为今天/明天/第二天/等。自动地?

ms-office - 来自 Python 的 PowerPoint 演示文稿幻灯片计数?

vba - On Error Goto 在 EventHandler subs 中不起作用

colors - 当 A 列中的值更改时更改行颜色的 VBA 代码

excel - 如何在字符串中搜索“-EXCEL