Excel 方法';显示警报';对象的'_应用程序失败';错误

Excel 方法';显示警报';对象的'_应用程序失败';错误,excel,vba,Excel,Vba,我在excel文件中编写了一个函数“TestFunction”,该函数有一行 “Application.DisplayAlerts=False”在其中,问题是如果我手动运行此函数,它不会出现任何错误,当我从中间层(C#)调用函数执行它时,会抛出错误“对象的方法”Display Alerts“error” 我不知道在这里查什么 请有人回答 提前谢谢。我猜这与微软的Internet Explorer(全文)有关。在您的问题中,您没有指定有关如何或从何处调用宏的任何内容,因此我不能确定。但是,我看到过

我在excel文件中编写了一个函数“TestFunction”,该函数有一行
“Application.DisplayAlerts=False”
在其中,问题是如果我手动运行此函数,它不会出现任何错误,当我从中间层(C#)调用函数执行它时,会抛出错误
“对象的方法”Display Alerts“error”

我不知道在这里查什么

请有人回答


提前谢谢。

我猜这与微软的Internet Explorer(全文)有关。在您的问题中,您没有指定有关如何或从何处调用宏的任何内容,因此我不能确定。但是,我看到过这样的例子,代码引用的是MSIE
应用程序
对象,而不是Excel对象。即使它不是MSIE,也可能是另一个定义了自己的
应用程序
的对象,因此它与Excel的
应用程序
对象冲突,因此以下内容仍应适用

如果我是对的,那么您需要在更改
DisplayAlerts
属性的代码行之前,将以下代码行添加到宏

On Error Resume Next
On Error GoTo 0
您还可以在更改
DisplayAlerts
属性的代码行之后添加以下代码行

On Error Resume Next
On Error GoTo 0
基本上是这样的:

On Error Resume Next 'This line is required.
Application.DisplayAlerts = False
On Error GoTo 0      'This line is optional to revert the error handling to default behaviour.

通过将这些代码行添加到宏中,可以抑制错误消息,宏将继续运行。请注意,在这种情况下,您无法更改
DisplayAlerts
属性。

谢谢您的回复。我不明白你的回答,如果“注意,在这种情况下你不能更改DisplayAlerts属性”,那么我为什么要添加“Application.DisplayAlerts=False”呢@user3842389:无法更改
DisplayAlerts
属性的原因是您无权访问Excel的
应用程序
对象--该名称已被MSIE或其他任何东西“劫持”。您可以使用禁用错误报告的
显示警报
行,也可以将其全部删除。如果您有时想从Excel执行脚本(而不是总是通过C#),那么这一行就值得保留,由您自己决定。不过,我的建议应该能解决你的问题。这里涉及到MSIE,我说得对吗?是的,涉及到MSIE,但即使我避免使用MSIE,正如我知道的其他检查方法一样,它也抛出了相同的错误。@user3842389:我很难确切地知道您的代码在您调用它的所有情况下都在做什么,我甚至不得不对涉及到MSIE做出(正确的,事实证明)猜测。C#在
System.Windows
(以及
System.Windows.Forms
)中有自己的
Application
对象,因此我假设这是您的代码正在查看的对象,而不是
Excel.Application
对象。@user3842389:本文可能有帮助:。另外,这个问题:可能使您能够从C#code访问
Excel.Application
对象。最有可能的解决方案是首先将Excel应用程序绑定到一个对象。就像从C#调用一样,调用
应用程序.DisplayAlerts
不涉及任何内容。我不太清楚如何在C中实现这一点,但在VBA中,您可以通过在
Set XL=createObject(Class:=“Excel.Application”)
之后执行类似于
Dim XL as Object
的操作,然后使用
XL.DisplayAlerts=False
。。