为什么Excel从命令行启动时会在Quit上抛出异常?

时间:2009-11-11 17:35:22

标签: windows excel vba cmd

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

  • 如果我双击文件以在Windows资源管理器中打开它(我正在运行Windows XP和Excel 2002),它可以正常工作。
  • 但是,如果我使用“开始”>中的Excel "C:\DataUpdate.xls"运行它在单独的文件中运行或从另一个Excel实例中的Shell运行,Excel将在退出时崩溃。

我无法弄清楚为什么它会在一个场景中而不是在另一个场景中。

在DataUpdate.xls中,我有两个程序UpdateTable()OnWorkbookOpen(),在工作簿打开时从Workbook_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
  AppVer:10.0.6854.0
  ModName:olconnector.dll
  ModVer:2.0.2303.0
  抵消:000114d5

为什么根据我启动应用程序的方式会有不同的行为,以及我可以做什么,以便应用程序的行为相同,无论我如何启动它?

2 个答案:

答案 0 :(得分:3)

根据google olconnector.dll是outlook连接器,一个办公室插件。

http://ask.officelive.com/workspace/qna/t/4578.aspx

由于它正在处理Outlook,我相信它会依赖于你在机器上使用的登录。

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

ProcessStartInfo startInfo = null;
Process batchProcess = null;

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

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

答案 1 :(得分:0)

当我只将命令application.quit放入函数Workbook_Open()时,它可以正常工作,当我通过doubleclick,通过命令test.xlsm以及通过命令"c:\Programme\Microsoft Office\Office12\EXCEL.EXE" test.xlsm启动它时。

  • 您是否也尝试将问题减少到只有一个命令?
  • 您在命令行中使用哪个命令。
  • 也许您可以尝试在DoEvents命令之后添加Application.Save
  • 您是否尝试将命令Excel.Application.Quit更改为Application.Quit?从命令行开始可能会有所不同。

我在Win XP Pro上使用Excel 2007。