2016-10-10 76 views
0

我有一個VBScript,通過在不可見模式下使用Visio.Application在後臺打開Visio文件。抑制Visio.Application警報

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應用程序生成的彈出窗口?

+1

如果Visio中有'Application.DisplayAlerts'並已設置'Visioapp'成爲Visio應用程序對象的實例(這是你所做的),那麼你可以嘗試'Visioapp.DisplayAlerts = False',它應該工作... – Dave

+0

@Dave我同意,但是這給了我一個錯誤(澄清了問題)。通過該擴展,問題可能是Visio應用程序實際上沒有該屬性? – Lilienthal

+0

VBS沒有理由不能做VBA可以用Object做的事情。編程語言自動生成VBS從早期綁定VBA對象(基於IDispatch)使用的後期綁定對象(儘管VBA可以通過Early或Late綁定來訪問它)。它們都會在VBA對象中運行代碼,因爲VBS對象只是轉發呼叫。 – 2016-10-10 13:17:08

回答

4

總結從@Dave@Noodles的意見,將Visio Application對象沒有像其他Office應用程序有一個屬性DisplayAlerts。相反,它提供了一個屬性AlertResponse,允許您定義應用程序是否與OK取消中止重試,&hellip響應警訊;

要與OK所有警報的應用程序響應更改您的代碼是這樣的:

Set Visioapp = CreateObject("Visio.Application") 
visioapp.AlertResponse = vbOk 
Set Visio = Visioapp.Documents.Open(VisioFile) 

注意,在這種情況下,你可以使用VBScript中已經提供了symbolic constantsvbOkvbCancelvbAbort,vbRetry,...)。對於特定於應用程序的常量(例如,SaveFlags用於SaveAsEx方法),但這不起作用。在這種情況下,你必須要麼使用數字值:

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

或腳本定義常量:

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

我對你的回答沒有任何問題,事實上你將它設置爲一個社區維基是令人欽佩的,但是你肯定至少應該離開它,並給予最初評論時間的人首先留下一個答案。 – Lankymart

+1

似乎沒有人願意將他們的答案作爲答案發布,所以我在維基答案中總結了這些評論,以免這個問題沒有得到真正的答案。 –

+0

我知道,但@Dave在最近1小時內沒有活躍,所以他們很可能沒有看到這一點,我認爲您必須給予人們一小時以上的回覆。 – Lankymart