Может ли предупреждение о макросах Visio подавляться при автоматизации в коде? - PullRequest
2 голосов
/ 25 июня 2009

Я автоматизирую Visio 2003 из приложения VB.NET. Мой код выглядит так (с удалением неинтересного материала):

Dim objApp As New Microsoft.Office.Interop.Visio.InvisibleApp
objApp.Settings.ShowFileOpenWarnings = False
Dim objDoc As Microsoft.Office.Interop.Visio.Document
objDoc = objApp.Documents.Open(VisioFilename)

Я обнаружил, что последняя строка заставляет Visio вызвать скрытый MessageBox:

Макросы в этом документе отключены, поскольку уровень безопасности высок, а макросы не имеют цифровой подписи и не проверены как безопасные. Для запуска макросов вы можете либо подписать их, либо изменить уровень безопасности.

Поскольку это будет работать на компьютерах, я не управляю файлами, я не контролирую, ни один из этих вариантов не работает для меня. Мне действительно все равно, что макросы отключены, я просто использую Visio для преобразования файла из его собственного формата в SVG. Я, конечно, не хочу предлагать пользователям, чтобы они понизили уровень безопасности, и я не хотел бы снижать его для них.

Как вы можете видеть из моего кода выше, я отключаю предупреждения об открытии файлов, но, похоже, они не включают предупреждение о макросах. Поскольку я использую Visio.InvisibleApp, оказывается, что предупреждение не отображается для пользователя. Запуск видимого экземпляра Visio не поможет, потому что я создаю пакетный конвертер, даже если сообщение было видимым, это означает, что пользователю придется нажимать кнопку ОК для каждого файла. Это сделало бы функцию пакетного преобразования практически бесполезной.

Я вижу, что класс Visio имеет свойство VBAEnabled, но оно доступно только для чтения. Если бы я мог просто отключить VBA при открытии файла, это, вероятно, решило бы проблему. Я просмотрел все свойства и свойство «Настройки» в классе и ничего не смог найти. Я провел множество поисков в Google и не могу найти ничего, что решает эту проблему.

Кто-нибудь знает, можно ли подавить это предупреждение при использовании автоматизации с Visio? Могу ли я сделать это, если я переключусь на Visio 2007?

1 Ответ

6 голосов
/ 30 июня 2009

Существует метод OpenEx, который работает так же, как Open, но принимает флаги. Одним из таких флагов является visOpenMacrosDisabled (& H80).

Есть и другие удобные флаги, такие как visOpenDontList (& H8), поэтому файлы, открытые с помощью автоматизации, не будут добавлены в список последних файлов.

...