将VBA宏应用于Visio中的不同页面

问题描述 投票:0回答:2

目前,我有一个Visio文件,该文件具有网络分区图(第1页),用户可以在其中将形状放在不同的区域中。可以在该页面上运行VB宏,该宏将收集特定于这些形状和流的各种数据,并将其导出到Word文件中以进行进一步报告。一切都很好,并且按预期工作。

但是,例如在云上,网络分区是不同的。因此,我想在同一文件中制作另一个页面(第2页),该页面具有更多面向云(GCP,AWS)的分区明细(VPC等)。我想在该页面(2)上运行相同的宏,以将详细信息导出到word文件中。

问题:我应该如何以及在何处告诉宏应该从哪个页面获取数据以运行输出。我一直在玩“ Set vsoPage = ActiveWindow.Page”之类的事情,并在宏收集形状的所有元信息之前执行了该过程

我希望基于MS Visio页面,该宏将从当前处于活动状态的页面中获取形状。

但是不,它只是在第1页上吐出东西,而不是第2页上的内容(尽管处于活动状态)。

只是想知道是否:-这是使用的正确代码行吗?-位置正确吗?

非常感谢您的帮助

vba visio
2个回答
0
投票

更有可能是:

设置vsoPage = ActivePage


0
投票

我不确定您的宏如何以及何时工作,但是以下一些片段可能会有所帮助:

'// 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
© www.soinside.com 2019 - 2024. All rights reserved.