关闭Excel.Workbook时出现COMException (0x80010108 - RPC_E_DISCONNECTED)异常

5
当我运行以下代码时,会收到如下异常:
''# NOTE: ExcelApp is a Private main form variable
Dim ReportBooks As Excel.Workbooks = ExcelApp.Workbooks
Dim ReportBook As Excel.Workbook = ReportBooks.Open(localFilename)
Dim ReportSheet As Excel.Worksheet = ReportBook.Sheets("Report")

''# Retreive data from sheet

ReleaseCOM(ReportSheet)
ReportBook.Close(True) ''# Error raised here
ReleaseCOM(ReportBook)
ReleaseCOM(ReportBooks)
ERROR:
COMException was unhandled
The object invoked has disconnected from its clients.
(Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED))
注意:所有数据似乎已经被正确地检索出来。
请帮助我诊断和克服这个错误。
1个回答

9

RPC_DISCONNECTED...出现可怕的“对象调用已断开与其客户端的连接”问题。这种情况有很多原因,看起来你已经处理了 Excel 中的全局变量问题。你能把第一个 ReleaseCOM(ReportSheet) 放到 ReportBook(Close) 下面并运行它吗?同时,请查看这里


不幸的是,交换导致错误的那一行和前一行并没有产生任何效果。当尝试关闭表格时,程序仍然会崩溃。 - Steven
1
兄弟,很抱歉听到这个。我已经处理了几次这个问题,每次都像魔法一样让它起作用。这里的主要问题是,在你到达 ReportBook.Close(True) 时,Excel 不再管理 ReportBook - 有些东西正在释放它 - 因此会出现错误。你是否尝试过在调试中添加观察器来步进代码并观察 ReportBook? - Todd Main
1
明白了!代码步进运行正常。我的代码意外地打开了同一个文件两次,并关闭了两次(第一次关闭后崩溃了)。感谢您的帮助。 - Steven
很高兴听到这个消息。那个特定的错误真的很令人沮丧,所以你解决了问题真是太棒了! - Todd Main
没错!有几个调用了相同的代码,其中包括关闭操作。 - Vertigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接