C# 处理Excel应用程序中的异常(0x800AC472)。屏幕更新
我正在写一个C# 处理Excel应用程序中的异常(0x800AC472)。屏幕更新,c#,excel,vsto,C#,Excel,Vsto,我正在写一个C#VSTOExcelAddin。 在我的项目中,需要更新和合并大量单元格 为了减少闪烁并提高性能,我将Application.ScreenUpdate设置为false,然后在操作完成后设置回true 问题是,有时我会将异常设置回true状态 错误消息: (HRESULT:0x800AC472)(VBA_E_忽略) 在这种情况下,Excel被卡住(因为没有屏幕更新),唯一的选择是退出/重新打开Excel 这是我的密码: Excel.Application app = someval
C#
VSTO
Excel
Addin。
在我的项目中,需要更新和合并大量单元格
为了减少闪烁并提高性能,我将Application.ScreenUpdate设置为false
,然后在操作完成后设置回true
问题是,有时我会将异常设置回true
状态
错误消息:
(HRESULT:0x800AC472)(VBA_E_忽略)
在这种情况下,Excel被卡住(因为没有屏幕更新),唯一的选择是退出/重新打开Excel
这是我的密码:
Excel.Application app = somevalue;
try
{
app.ScreenUpdating = false;
return true;
}
catch (Exception e)
{
e.LogExceptionError($"SafeEnableScreenUpdating -> param={enable}");
}
... some large operation.
try
{
app.ScreenUpdating = true;
return true;
}
catch (Exception e)
{
// exception is here.
e.LogExceptionError($"SafeEnableScreenUpdating");
}
到目前为止,我找到的唯一可能的解决方案是创建一个循环并尝试几次恢复状态。
有人遇到过这样的问题吗?很可能在调用
屏幕更新时会显示一个对话框窗口。您可能会发现页面中描述的类似异常
另外,我建议设置CalculationMode
和EnableEvents
属性:
Sub YourSub()
On Error GoTo EH
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
' Code here
CleanUp:
On Error Resume Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Exit Sub
EH:
' Do error handling
GoTo CleanUp
End Sub
如果这有助于某人:
我使用了一个Excel DNA助手函数ExcelAsyncUtil.QueueAsMacro
来执行屏幕更新
启用/禁用操作
根据报告:
这将等待Excel准备就绪,然后运行您传递的委托。在里面
在这里,您可以使用对象模型
因此,我的代码如下所示(我在操作前后调用此函数):
我会用一个。此外,您还可以添加一个重置屏幕更新。不确定最终如何在这里提供帮助?操作在呼叫应用程序中失败。ScreenUpdate=true;->在finally block中,它也会有同样的行为。很抱歉,在我的手机上错过了这一部分。我还是会查一下背景工作人员。在单独的线程中运行该过程可能会有所帮助。如果在更新时还将“Visible”标志设置为false,会发生什么情况。
ExcelAsyncUtil.QueueAsMacro(state =>
{
try
{
app.ScreenUpdating = (bool)state;
}
catch (Exception e)
{
e.LogExceptionError($"ExcelAsyncUtil.QueueAsMacro");
}
}, enable); // enable can be true or false.