Vbscript 正在抑制Visio.Application警报

Vbscript 正在抑制Visio.Application警报,vbscript,Vbscript,我有一个VBScript,可以在不可见模式下使用Visio.Application在后台打开Visio文件 Set Visioapp = CreateObject("Visio.Application") Visioapp.Visible = False Set Visio = Visioapp.Documents.Open(VisioFile) 这可以正常工作,除非我在处理文件时试图打开一个生成弹出窗口的文件。如果出现这种情况,应用程序将显示一个通知用户的警报,但由于应用程序对用户不可见或在

我有一个VBScript,可以在不可见模式下使用Visio.Application在后台打开Visio文件

Set Visioapp = CreateObject("Visio.Application")
Visioapp.Visible = False
Set Visio = Visioapp.Documents.Open(VisioFile)
这可以正常工作,除非我在处理文件时试图打开一个生成弹出窗口的文件。如果出现这种情况,应用程序将显示一个通知用户的警报,但由于应用程序对用户不可见或在没有用户在场的情况下运行,脚本将无限期挂起,等待不会出现的输入

如果我正在为Excel或Word编写VBA代码,我可以使用Application.DisplayAlerts=False和/或可能的DisplayEvents。但在我的VBScript中,Visio应用程序没有该属性。Visioapp.DisplayAlerts=False将显示错误对象不支持此属性或方法


如何抑制由从VBScript打开的Visio应用程序生成的弹出窗口?

总结来自和的评论,Visio对象不像其他Office应用程序那样具有属性DisplayAlerts。相反,它提供了一个属性,允许您定义应用程序是否应使用OK、Cancel、Abort、Retry等来响应警报

要让应用程序响应“确定所有警报”,请将代码更改为以下内容:

Set Visioapp = CreateObject("Visio.Application")
visioapp.AlertResponse = vbOk
Set Visio    = Visioapp.Documents.Open(VisioFile)
请注意,在这种情况下,您可以使用已提供vbOk、vbCancel、vbAbort、vbRetry等功能的VBScript…。但是,对于特定于应用程序的常量,例如方法的SaveFlags,这将不起作用。在这些情况下,您必须使用数值:

Visio.SaveAsEx "C:\path\to\output.vsd", 1
或者在脚本中定义常量:

Const visSaveAsRO = 1
...
Visio.SaveAsEx "C:\path\to\output.vsd", visSaveAsRO

总结来自和的评论,Visio对象不像其他Office应用程序那样具有DisplayAlerts属性。相反,它提供了一个属性,允许您定义应用程序是否应使用OK、Cancel、Abort、Retry等来响应警报

要让应用程序响应“确定所有警报”,请将代码更改为以下内容:

Set Visioapp = CreateObject("Visio.Application")
visioapp.AlertResponse = vbOk
Set Visio    = Visioapp.Documents.Open(VisioFile)
请注意,在这种情况下,您可以使用已提供vbOk、vbCancel、vbAbort、vbRetry等功能的VBScript…。但是,对于特定于应用程序的常量,例如方法的SaveFlags,这将不起作用。在这些情况下,您必须使用数值:

Visio.SaveAsEx "C:\path\to\output.vsd", 1
或者在脚本中定义常量:

Const visSaveAsRO = 1
...
Visio.SaveAsEx "C:\path\to\output.vsd", visSaveAsRO

如果Visio有Application.DisplayAlerts,并且您已将Visioapp设置为Visio应用程序对象的实例(即您所做的),那么您可以尝试Visioapp.DisplayAlerts=False,它应该可以工作…@Lilienthal显然Visio有它,他们只是称它为与其他Office应用程序不同的东西。。。然后单击应用程序和文档以查看程序必须实现的标准属性和方法。您确实将其设置为1而不是false。阅读文档@戴夫再次感谢你的帮助。请告知我您是否要将AlertResponse作为答案提交,或者我是否应该自行回答以标记此问题已解决。如果Visio具有Application.DisplayAlerts,并且您已将Visioapp设置为Visio应用程序对象的实例(即您所做的),则您可以尝试Visioapp.DisplayAlerts=False,它应该可以工作…@Lilienthal Visio确实有,他们只是称之为与其他Office应用程序不同的东西。。。然后单击应用程序和文档以查看程序必须实现的标准属性和方法。您确实将其设置为1而不是false。阅读文档@戴夫再次感谢你的帮助。如果您想提交AlertResponse作为答案,或者我是否应该自行回答以标记此问题已解决,请告诉我。我对您的回答没有异议事实上,您将其设置为社区wiki是令人钦佩的,但你肯定至少应该离开它,让最初发表评论的其他人有时间先留下答案?似乎没有人愿意将他们的答案作为答案发布,所以我在一个维基答案中总结了这些评论,恐怕这个问题仍然没有一个实际的答案。已经有太多的问题和评论应该是答案。他本可以发布一个答案,而不是他链接到文档的评论。此外,没有人阻止他发布自己的答案。@AnsgarWiechers我真的不介意,我当然很感激在这个场景中使用符号常量的额外信息,但这确实阻止了Dave提交自己的答案。你和我都不喜欢这个代表,但也许戴夫喜欢。这就是为什么我在确认基于Dave链接的解决方案后没有立即自我回答的原因。我理解@Lankymart的担忧-但我没有时间做更多的事情,只是试图为提问者指出答案的方向,我也不担心代表。关键是这个问题得到了回答,我们有一个清晰、简洁和有用的解释。我对你的回答没有异议。事实上,你将它设置为社区维基是令人钦佩的,但你肯定至少应该离开它,让最初发表评论的人有时间先留下答案?似乎没有人愿意
g将他们的答案作为答案发布,因此我在wiki答案中总结了评论,以免问题仍然没有实际答案。已经有太多的问题带有应该是答案的评论。他本可以发布一个答案,而不是他链接到文档的评论。此外,没有人阻止他发布自己的答案。@AnsgarWiechers我真的不介意,我当然很感激在这个场景中使用符号常量的额外信息,但这确实阻止了Dave提交自己的答案。你和我都不喜欢这个代表,但也许戴夫喜欢。这就是为什么我在确认基于Dave链接的解决方案后没有立即自我回答的原因。我理解@Lankymart的担忧-但我没有时间做更多的事情,只是试图为提问者指出答案的方向,我也不担心代表。关键是这个问题得到了回答,我们有一个清晰、简洁和有益的解释。