Windows 为什么Excel从命令行启动时在退出时抛出异常?

Windows 为什么Excel从命令行启动时在退出时抛出异常?,windows,excel,vba,cmd,Windows,Excel,Vba,Cmd,我有一个简单的Excel文件,它在数据库打开时查询,然后自动关闭 如果我双击文件从Windows资源管理器(我运行的是Windows XP和Excel 2002)中打开它,它就可以正常工作 但是,如果我在另一个Excel实例的单独文件中使用Excel“C:\DataUpdate.xls”from Start>run或fromShell,Excel将在退出时崩溃 我不明白为什么它在一个场景中成功,而在另一个场景中却没有成功 在DataUpdate.xls中,我有两个过程,UpdateTable

我有一个简单的Excel文件,它在数据库打开时查询,然后自动关闭

  • 如果我双击文件从Windows资源管理器(我运行的是Windows XP和Excel 2002)中打开它,它就可以正常工作
  • 但是,如果我在另一个Excel实例的单独文件中使用
    Excel“C:\DataUpdate.xls”
    from Start>run或from
    Shell
    ,Excel将在退出时崩溃
我不明白为什么它在一个场景中成功,而在另一个场景中却没有成功

在DataUpdate.xls中,我有两个过程,
UpdateTable()
OnWorkbookOpen()
,在工作簿打开时从
Workbook\u Open()
调用

Option Explicit

Sub UpdateTable()

Dim ws As Worksheet
Dim qt As QueryTable

Set ws = Worksheets("Sheet1")
Set qt = ws.Range("A1").QueryTable

qt.Refresh BackgroundQuery:=False

End Sub

Sub OnWorkbookOpen()
On Error Resume Next
If ActiveWorkbook.Name = "DataUpdate.xls" Then
'I put this If statement in so I can change the file's
'name and then edit the file without code
'running.

    UpdateTable
    ActiveWorkbook.Save

    Excel.Application.Quit
End If


End Sub
如果我从Windows资源管理器打开该文件,一切正常。如果我使用
Excel“C:\DataUpdate.xls”
从命令行运行它,代码将正常运行,直到应用程序尝试使用
application.Quit退出,此时Excel会抛出异常

当我查看错误报告的详细信息时,以下是我发现的一些信息:

AppName:excel.exe
应用程序:10.0.6854.0
ModName:olconnector.dll
模式:2.0.2303.0
偏移量:000114d5


为什么会有不同的行为取决于我如何启动应用程序,我可以做些什么,使应用程序的行为与我如何启动应用程序的行为相同?

当我只将命令
应用程序。退出
到函数工作簿\u Open()中时,通过双击启动时,在这里工作正常,通过命令
test.xlsm
以及通过命令
“c:\Program\Microsoft Office\Office12\EXCEL.EXE”test.xlsm

  • 您是否也尝试将问题简化为一个命令
  • 从命令行使用哪个命令
  • 也许您可以尝试将
    DoEvents
    放在
    应用程序之后。是否保存
    命令
  • 是否尝试将命令
    Excel.Application.Quit
    更改为
    Application.Quit
    ?也许从命令行开始时会有不同

我在WinXP Pro上使用Excel 2007。

根据google的说法,olconnector.dll是outlook connector,一个office加载项

因为它处理的是Outlook,我相信它会对您在机器上使用的登录名有一定的依赖性

打开excel时,您使用的凭据是否与登录计算机时使用的帐户相同

ProcessStartInfo startInfo = null;
Process batchProcess = null;

startInfo = new ProcessStartInfo();
startInfo.Domain = "somedomain";
startInfo.UserName = "Domainuser";
startInfo.Password = "pwd";

不太确定错误是什么,但这是可以尝试的。

使用“命令”字符串不是比检查文件名来说明退出应用程序的原因更舒服吗?它提供了检查命令行参数的可能性?这样,您就可以使用如下命令行参数启动Excel:“c:\Program\Microsoft Office\Office12\Excel.EXE”test.xlsm noQuit,这样您就不必每次都更改名称。此外,您还可以在Excel文件类型的弹出菜单中执行新命令。请查看此示例。谢谢您的建议。我得好好玩玩。-我只是试着把它限制在应用程序范围内。退出。没用从cmd:EXCEL.EXE“C:\DataUpdate.xls”-将DoEvents放在应用程序之后。退出不起作用-我将其更改为应用程序。退出-不起作用-如果不是Office Live加载项导致问题,我将受到谴责+谢谢你的链接和提示。我从来没有想到会有这么模糊的东西导致这个问题。卸载Office Live插件v1.3修复了这个问题。