如何从附加到不同文档的脚本访问已打开的 visio 页面

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

我的一侧有一个 vba 格式的 .vssm 脚本文件附加到启用 .vsdm 脚本的文档,另一侧有数百个 .vsd 和 .vsdx 文件。

在后台的 vba 编辑器中打开 .vssm 脚本文件后,我希望能够手动打开任意数量的 .vsd 或 .vsdx 文件,并对其中任何一个文件运行宏,具体取决于这些文件的具体要求文件。我希望能够访问堆顶部 Visio 文档中所选页面中的所选形状。

当我在脚本中使用代码

ActivePage
Application.ActiveWindow.page
时,我没有获取当前位于 Visio 焦点之上的文档页面,而是获取了 .vssm 文件的页面,该页面位于 Visio 焦点之上。脚本已附上。

我已经有一个循环用于批处理一系列文件,其代码如下:

    ' Create a new instance of Visio
    Set visioApp = CreateObject("Visio.Application")
    ' Disable alerts so that Visio doesn't prompt for confirmation to overwrite files
    visioApp.AlertResponse = 7
    ' Loop through each Visio file in the folder
    filePath = Dir(visioPath & "\*.vsd*")
    Do While filePath <> ""
        ' Open the Visio file
        Set visioDoc = visioApp.Documents.Open(visioPath & "\" & filePath)
        ' Loop through each page in the Visio file
        For Each visioPage In visioDoc.Pages

但我希望能够打开我选择的任何文件并根据该特定文件的要求对其进行自定义处理。我希望能够在该文件当前页面内当前选定的形状上运行宏,而无需将脚本附加到该文件。

编辑**************************************************** ****

我按照建议尝试了此代码,但我只获得了附加脚本的 .vsdm 文档页面:

Dim doc As Document, p As page 
For Each doc In Application.Documents 
For Each p In doc.Pages 
Debug.Print (p.name) 
Next 
Next 
End Sub
vba visio
1个回答
2
投票

ActivePage 始终引用活动文档中的页面,但这是一个只读属性。如果您想引用另一个文档,那么您需要通过索引或完整路径和名称明确地这样做。 例如 .文档[3].

.文档['fred/documentname.vsdx'].

© www.soinside.com 2019 - 2024. All rights reserved.