Применить макрос VBA к разным страницам в Visio - PullRequest
0 голосов
/ 19 марта 2020

На данный момент у меня есть файл Visio, на котором есть схема сетевого зонирования (Страница 1), где пользователь может размещать фигуры в разных зонах. На этой странице можно запустить макрос VB, который будет собирать все виды данных, которые заданы c для этих фигур и потоков, и экспортировать их в файл Word для дальнейшей отчетности. Это все хорошо и работает как положено.

Однако сетевое зонирование отличается, например, в облаке. Итак, я хочу сделать еще одну страницу (страницу 2) в том же файле, в которой будет больше деталей зонирования (GCP, AWS) (VP C et c.). И я хочу запустить те же макросы на этой странице (2), чтобы экспортировать детали в текстовый файл.

ПРОБЛЕМА: Как и где я должен сказать макросу, с какой страницы он должен получить данные для запуска вывода. Я играл с такими вещами, как «Set vsoPage = ActiveWindow.Page», и выполнил это до того, как макрос собрал всю мета-информацию о формах

Я надеялся, что на основе страницы MS Visio макрос будет захватывать формы со страницы, которая была бы активной.

Но нет, он просто выплевывает вещи на странице 1. А не на странице 2 (хотя и активен).

Просто интересно, если: - это правильная строка кода для использования? - правильное ли расположение?

Большое спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Я не совсем уверен, как и когда работает ваш макрос, но вот некоторые фрагменты, которые могут помочь:

'// Get the active page:
Dim visPg as Visio.Page
Set visPg = Visio.ActivePage
If Not(visPg Is Nothing) Then
    ...
End If

'// Here we'll be really picky about the active window, this is 
'// probably overkill, but Visio can have several different types
'// of active windows:
Dim visPg as Visio.Page
Dim visWin As Visio.Window
Set visWin = Visio.ActiveWindow
If (visWin .Type = Visio.VisWinTypes.visDrawing) Then
    If (visWin .SubType = Visio.VisWinTypes.visPageWin) Then
        '// The active window is a drawing page window, and not
        '// a master-editing window, nor a group-editing window:
        Set visPg = visWin.Page
        '//...do stuff with visPg
    End If
End If
0 голосов
/ 19 марта 2020

Скорее всего будет:

Установить vsoPage = ActivePage

...