У меня есть набор файлов чертежей Visio, которые содержат код VBA, который больше не нужен (фактически, возникают ошибки при попытке открыть файл, поскольку модуль, на который есть ссылка в VBA, больше не существует).
Из-за характера надстройки, над которой я работаю, мои пользователи должны поддерживать макросы и VBA включенными. Однако любой файл, который они открывают в Visio, должен сначала автоматически удалить код VBA.
Я могу достичь точки останова в моем коде при запуске приложения Visio, но до выбора файла для открытия. Я также могу достичь точки останова в моем коде после того, как файл выбран и загружен в Visio. Кажется, я не могу найти способ сделать перерыв после выбора файла, но до того, как Visio загрузит его.
Глядя на сборки Visio Interop в C#, я вижу события Visio.Application с именами «OnDocumentOpened» и «OnDocumentCreated», но они не запускаются до «после» загрузки файла. К сожалению, я не смог найти ничего под названием «BeforeDocumentOpened» или «BeforeDocumentCreated», что в основном именно то, что мне нужно. Существуют другие события с похожими именами, например «BeforeDocumentSave» и «BeforeDocumentClose», но, очевидно, они не то, что я ищу.
Любая помощь будет принята с благодарностью.
Мой вопрос: есть ли какие-либо методы для захвата, когда Visio пытается открыть файл чертежа, но до его фактического открытия? Здесь я собираюсь удалить код VBA из файла, который я уже реализовал. Если нет, то есть ли какие-нибудь известные обходные пути для достижения чего-то подобного?
Пример плохого VBA, который я хочу удалить:
Private Sub Document_DocumentCreated(ByVal doc As Visio.Document)
Call Initialize(doc)
End Sub
Private Sub Document_DocumentOpened(ByVal doc As Visio.Document)
Call Initialize(doc)
End Sub
Private Sub Initialize(doc As Visio.Document)
Dim myLib As Object
Set myLib = CreateObject("MODULE_NAME") 'Errors here, since we got rid of the module
...
End Sub