нашел как отключить все сообщения визио
нужно в скрипт вставить такую строчку:
visApp.AlertResponse = 1
Вернее, если быть более точным, не отключить. В зависимости от значения, визио по разному реагирует на появлющиеся сообщения.
1 - это нажатие на "Ок" для всех появляющихся сообщений...
если кому интересно, скрипт будет выглядеть так:
Set Arg = WScript.Arguments
If Arg.Count = 1 Then
Dim strPath
'путь к схеме
strPath = Arg(0)
UpdateScheme (strPath)
End if
Function UpdateScheme(strPath)
Dim visApp
Set visApp = WScript.CreateObject("Visio.InvisibleApp")
visApp.AlertResponse = 1
visApp.Documents.Open strPath
visApp.ActiveWindow.SelectAll
For Each shp In visApp.ActiveWindow.Selection
If shp.CellExists("User.ODBCConnection", 0) Then
If shp.Cells("EventDrop").Formula = "RUNADDON(""DBR"")" Then
shp.Cells("EventDrop").Trigger
End If
End If
Next
if visApp.ActiveDocument.Saved=false Then visApp.ActiveDocument.Save
visApp.Quit
End Function
Что он делает: при запуске скрипта из командной строки, где в качестве аргумента - имя файла(например: Update.vbs c:\схема.vsd), он создает невидимое приложение визио, загружает туда эту схему, выделяет все объекты и для каждого шейпа связанного с базой данных делает обновление свойств. После этого сохраняет схему и закрывает приложение.
Для обновления свойств используется следующий кусок кода:
For Each shp In visApp.ActiveWindow.Selection
If shp.CellExists("User.ODBCConnection", 0) Then
If shp.Cells("EventDrop").Formula = "RUNADDON(""DBR"")" Then
shp.Cells("EventDrop").Trigger
End If
End If
Next
По идее, вместо этого, можно было бы написать:visApp.Addons("DBRS").Run ""
но при этом скрипт вылетает, если не все объекты схемы соединены с базой. Судя по всему это баг визио.