VB 在Visio 2010 以编程方式创建子进程图

Posted C# java C++ 开源通信

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB 在Visio 2010 以编程方式创建子进程图相关的知识,希望对你有一定的参考价值。

在2010年Visio以编程方式创建子进程图

Office 2010  https://msdn.microsoft.com/en-us/library/gg650651.aspx
 

简介: 学习如何创建子流程图表以编程方式在Microsoft Visio 2010。

最后修改: 2011年4月07日

适用于: Office 2010 | SharePoint Server 2010 | 2010 | Visio Visio溢价2010

在这篇文章中 
概述 
创建一个流程图 
创建子流程页面 
移动一个形状子流程页面 
移动选择形状的子流程页面 
结论 
额外的资源 

发表: 2011年3月

提供的: 扫罗Candib,微软公司

内容

概述

 

本文描述了如何使用Visual Basic应用程序(VBA)对象模型创建一个Microsoft Visio 2010子过程图。 子过程图通常是更大的一部分process-overview图基于Visio流程图模板之一,通常用于大型流程建模。 较大的过程往往由子流程可以被认为是独立的单位。 您可以创建详细的子流程图表,并将它们链接在一起更大的process-overview图。

技术分享 请注意

子流程功能只能在2010年Visio溢价。

子流程总览图上由一个单一的形状与子流程页面。 打开子流程页面,您按下Ctrl键,然后单击链接的形状,或右键单击链接的形状,然后单击快捷菜单上的命名为超链接。 你可以把子流程图纸在一个文档或单独的页面,如果你想使用相同的子过程在多个图,您可以创建子进程图,保存它,然后从子流程链接到它的形状在其他图。

一般程序创建子流程关系图是一样的你是否手动创建图表或编程方式:您将页面添加到现有图,然后形状添加到这个页面来表示子流程。 手动创建和链接子流程图表,在您使用命令 过程 选项卡2010年Visio丝带。 以编程方式创建和链接子流程图表,你使用VBA代码。

在矢量绘图软件的早期版本中,您可以使用 Shape.AddHyperlink 方法添加超链接的形状主要流程页面,你想链接到子流程页面。 然后,你设置 子地址 属性值的 超链接 返回的对象 AddHyperlink 子流程页面的方法。 然而,2010年Visio VBA对象模型,有三个新方法,您可以使用:

  • Shape.CreateSubProcess 它并返回一个新的子流程页面链接到现有流程页面上的形状。

  • Shape.MoveToSubprocess 移动现有的形状到指定的页面,源页面上滴一个替换的形状,然后更换形状到目标页面的链接。 返回了形状的选择在目标页面。

    技术分享 请注意

    解释在本文的后面,现有的形状必须是一个容器的形状。

  • Selection.MoveToSubprocess 移动到指定的页面,选择源页面上滴一个替换的形状,然后更换形状到目标页面的链接。 返回了形状的选择在目标页面。

在一般情况下,您使用下列程序以编程方式创建一个子过程图。

以编程方式创建一个子过程图

  1. 2010年Visio创建流程图文档,添加形状,适当的,代表了整个过程。

    你可以做这个图的全部或部分以编程方式创建。

  2. 识别的流程图形状或形状你想代表并链接到一个或更多的子过程或子过程,每一个页面上一个单独的子流程。

  3. 使用 CreateSubProcess 方法在每一个这样的形状来创建一个新的子流程页面在同一个文档。

  4. 通过新创建的页面 Shape.MoveToSubprocess 或 Selection.MoveToSubprocess 方法,结合对象(例如,Visio大师)你想用来代替前面指定的形状。

    这个对象传递给所选的方法将代表源页面上的子流程和子流程的链接页面。

以下部分提供了关于这些方法的更多信息,以及如何使用它们。 在下一节中提供的示例代码创建了一个简单的子过程图。

创建一个流程图

 

证明本文后面的代码是如何工作的,创建流程图图模型是很有用的一个简单的过程。 创建这幅画,打开矢量绘图软件,创建一个新的图的 流程图 模板,打开Visual Basic编辑器,然后运行下面的代码。

技术分享 请注意

你可以用 Documents.Add 方法以编程方式创建一个流程图图。 然而,对于这个演示的目的,更方便的手动创建绘图,然后添加代码。 这样,代码在同一个文档的作用哪些,除此之外,使您能够使用 ThisDocument 对象在您的代码中。

技术分享 重要的

虽然单位绘图页上的度量,你必须指定 xPos 和 yPos 参数 Shape.Drop 方法在英寸。

 
Public Sub CreateSampleFlowchart()

    Dim vsoDocumentStencil As Document
    Dim vsoStencilDocument As Document
    Dim vsoPage As Page
    Dim vsoMasterProcess As Master
    Dim vsoMasterDecision As Master
    Dim vsoMasterSubProcess As Master
    Dim vsoMasterContainer As Master
    Dim vsoShapeProcess1 As Shape
    Dim vsoShapeProcess2 As Shape
    Dim vsoShapeProcess3 As Shape
    Dim vsoShapeProcess4 As Shape
    Dim vsoShapeToSubProcessA As Shape
    Dim vsoShapeToSubProcessB As Shape
    Dim vsoShapeDecision1 As Shape
    Dim vsoShapeDecision2 As Shape
    Dim vsoShapeSelection1 As Shape
    Dim vsoShapeSelection2 As Shape
    Dim vsoShapeContainer As Shape
    Dim vsoSelection As Selection
   
    Dim intDiagramServices As Integer
    intDiagramServices = ActiveDocument.DiagramServicesEnabled
    intDiagramServices = visServiceVersion140
    
    ‘ Specify masters to drop.
    Set vsoMasterProcess = Visio.Documents("BASFLO_M.VSS").Masters("Process")
    Set vsoMasterDecision = Visio.Documents("BASFLO_M.VSS").Masters("Decision")
    Set vsoMasterSubProcess = Visio.Documents("BASFLO_M.VSS").Masters("Subprocess")
    
    ‘ Set the Page object equal to the first page.
    Set vsoPage = ThisDocument.Pages(1)
    
    ‘ Create the first process shape.
    Set vsoShapeProcess1 = vsoPage.Drop(vsoMasterProcess, 3, 4.5)
    vsoShapeProcess1.Text = "Process 1"
        
    ‘ Create and connect the first decision shape.
    Set vsoShapeDecision1 = vsoPage.DropConnected(vsoMasterDecision, vsoShapeProcess1, visAutoConnectDirRight)
    vsoShapeDecision1.Text = "Decision"
    
    ‘ Create and connect the second process shape.
    Set vsoShapeProcess2 = vsoPage.DropConnected(vsoMasterProcess, vsoShapeDecision1, visAutoConnectDirRight)
    vsoShapeProcess2.Text = "Process 2"
    
    ‘ Create and connect one shape to link to a subprocess.
    Set vsoShapeToSubProcessA = vsoPage.DropConnected(vsoMasterProcess, vsoShapeDecision1, visAutoConnectDirDown)
    vsoShapeToSubProcessA.Text = "SubProcessA"
    
    ‘ Create and connect another shape to link to a subprocess.
    Set vsoShapeToSubProcessB = vsoPage.DropConnected(vsoMasterProcess, vsoShapeToSubProcessA, visAutoConnectDirDown)
    vsoShapeToSubProcessB.Text = "SubProcessB"
    
     ‘ Create and connect the second decision shape.
    Set vsoShapeDecision2 = vsoPage.DropConnected(vsoMasterDecision, vsoShapeProcess2, visAutoConnectDirRight)
    vsoShapeDecision2.Text = "Decision"
    
    ‘ Create and connect the third process shape.
    Set vsoShapeProcess3 = vsoPage.DropConnected(vsoMasterProcess, vsoShapeDecision2, visAutoConnectDirRight)
    vsoShapeProcess3.Text = "Process 3"
    
    ‘ Create and connect the fourth process shape.
    Set vsoShapeProcess4 = vsoPage.DropConnected(vsoMasterProcess, vsoShapeDecision2, visAutoConnectDirDown)
    vsoShapeProcess4.Text = "Process 4"
    
    Set vsoShapeSelection1 = vsoPage.Shapes.Item(6)
    Set vsoShapeSelection2 = vsoPage.Shapes("Process.8")
    
    ActiveWindow.DeselectAll
    Set vsoSelection = ActiveWindow.Selection
    
    ‘ Select two shapes to add to a container.
    vsoSelection.Select vsoShapeSelection1, visSelect
    vsoSelection.Select vsoShapeSelection2, visSelect
      
    ‘ Draw a container around the shapes.
    Set vsoStencilDocument = Application.Documents.OpenEx(Application.GetBuiltInStencilFile(visBuiltInStencilContainers, visMSMetric), visOpenHidden)
    Set vsoShapeContainer = Application.ActivePage.DropContainer(vsoStencilDocument.Masters.ItemU("Container 5"), vsoSelection)
    vsoShapeContainer.Text = "SubProcess Container"
    vsoStencilDocument.Close

End Sub

当你完成后,你的画应该类似于图1。

图1所示。 样画流程图

技术分享

在这个示例图,一个决定的一个分支形状导致容器形状封装子流程。 你必须使用一个容器的形状来表示这个子过程,因为这篇文章描述如何Shape.MoveToSubprocess 方法,该方法只能在容器的形状。

其他分支引向另一个流程的形状(过程2),反过来,导致另一个决定形状和另外两个过程。

创建子流程页面

 

现在您已经准备好创建子流程页面。 事实上,您将创建两个页面,因为你的画形状,代表并链接到包含两个单独的子流程。 如前所述,Visio提供Shape.CreateSubprocess 方法来创建一个新的子流程页面链接到源的形状。 如以下代码所示,该方法不需要参数,并返回一个 页面 对象代表了新创建的子流程页面。

如果源形状包含文本,Visio分配文本作为新页面的名称。 如果源形状不包含文本,Visio分配一个默认名称,如“第2页”或“第三页”,根据现有的页面的数量。 下面的代码要更进一步,直接分配更具描述性的名称返回的页面。

将下面的代码粘贴到Visual Basic编辑和运行它。

 
Public Sub CreateSubProcessPages()

    Dim vsoShape As Shape
    Dim vsoPage1 As Page
    Dim vsoPage2 As Page
    
    ‘ Create and name the first subprocess page.
    Set vsoShape = ActivePage.Shapes("Container 5")
    Set vsoPage1 = vsoShape.CreateSubProcess()
    vsoPage1.Name = "SubProcessPage1"
    
    ‘ Create and name the second subprocess page.
    Set vsoShape = ActivePage.Shapes("Process.4")
    Set vsoPage2 = vsoShape.CreateSubProcess()
    vsoPage2.Name = "SubProcessPage2"

End Sub

现在你有两个新的子流程页面。 下一步是将形状,每个子流程到各自的页面。 为此,您将使用两个 MoveToSubprocess 本文前面描述的方法,一个上 形状 对象,和其他 选择 对象。

移动一个形状子流程页面

 

将一个形状从子过程的过程主页页面,您可以使用 Shape.MoveToSubprocess 方法。 这种方法是专门移动容器形状子流程页面,在假设子过程是由容器的成员组成的。 容器 Visio 2010中的一个新特性,形状,视觉控制和逻辑上相关页面上的其他形状。 他们通常有一个可见的边界在他们的内容,他们可能有一个文本标题。 他们提供特殊的操作来处理他们包含的形状。 的 Shape.MoveToSubprocess 方法不工作不是容器的形状。 关于如何使用容器的更多信息,见 额外的资源 本文的部分。

的 Shape.MoveToSubprocess 方法的参数表1所示。

表1。 形状。 MoveToSubprocess参数

的名字

必需的/可选

数据类型

描述

页面

要求

页面

形状的子流程页面应该感动。 你不能通过当前页面。

ObjectToDrop

要求

(未知)

更换形状。

NewShape

可选

形状

出参数。 返回的形状与子流程页面。

ObjectToDrop 通常是一个矢量绘图软件对象,如 主 或 MasterShortcut 对象。 然而,它提供了一个可以是任何OLE对象 IDataObject 接口。 如果ObjectToDrop 为空,Visio滴一个默认的形状。

以下代码示例展示了如何使用 Shape.MoveToSubprocess 方法将一个容器的形状从子过程的过程(源)主页页面。 这滴 子流程 主源页面上的形状来代替容器形状和子流程页面链接。

将下面的代码粘贴到Visual Basic编辑和运行它。

 
Public Sub MoveShape()

    Dim vsoPage As Page
    Dim vsoShape As Shape
    Dim vsoMaster As Master
    Dim vsoShapeNew As Shape

    ‘ Specify the container shape, the master shape to take its place, and the subprocess page.
    Set vsoMaster = Visio.Documents("BASFLO_M.VSS").Masters("SubProcess")
    Set vsoShape = ActivePage.Shapes("Container 5")
    Set vsoPage = ActiveDocument.Pages("SubProcessPage1")
    
    vsoShape.MoveToSubprocess vsoPage, vsoMaster, vsoShapeNew

End Sub

运行代码后,源页面应该类似于图2。

图2。 源页面

技术分享

子流程页面应该类似于图3所示。

图3。 子流程页面

技术分享

移动选择形状的子流程页面

 

移动选择的形状从主进程页子流程页面,您可以使用 Selection.MoveToSubprocess 方法。 Selection.MoveToSubprocess 将作用于两个或两个以上的选择吗 形状 对象的任意组合简单的形状和容器,或选择一个容器 形状 对象,是否包含成员的形状。

的 Selection.MoveToSubprocess 方法的参数如表2所示。

表2。 选择。 MoveToSubprocess参数

的名字

必需的/可选

数据类型

描述

页面

要求

页面

子流程页面的选择应该感动。 你不能通过当前页面。

ObjectToDrop

要求

(未知)

更换形状。

NewShape

可选

形状

出参数。 返回的形状与新页面。

ObjectToDrop 通常是一个矢量绘图软件对象,如 主 或 MasterShortcut 对象。 然而,它提供了一个可以是任何OLE对象 IDataObject 接口。 如果ObjectToDrop 为空,Visio滴一个默认的形状。

以下代码示例展示了如何使用 Selection.MoveToSubprocess 方法来移动选择的形状从主程序(源)子流程页面的页面。 它选择一组形状,然后滴 子流程主源页面上的形状来代替所选形状和子流程的链接页面。

将下面的代码粘贴到Visual Basic编辑和运行它。

 
Public Sub MoveSelection()

    Dim vsoSelection As Selection
    Dim vsoPageSource As Page
    Dim vsoPageTarget As Page
    Dim vsoShapeNew As Shape
    Dim vsoMaster As Master
    Dim vsoShapeSelection1 As Shape
    Dim vsoShapeSelection2 As Shape
    Dim vsoShapeSelection3 As Shape
    Dim vsoShapeSelection4 As Shape
    
    Set vsoPageSource = ThisDocument.Pages("Page-1")
    Set vsoPageTarget = ThisDocument.Pages("SubProcessPage2")
    Set vsoMaster = Visio.Documents("BASFLO_M.VSS").Masters("SubProcess")
    
    ‘ Specify the shapes to select.
    Set vsoShapeSelection1 = vsoPageSource.Shapes("Process.4")
    Set vsoShapeSelection2 = vsoPageSource.Shapes("Decision.10")
    Set vsoShapeSelection3 = vsoPageSource.Shapes("Process.12")
    Set vsoShapeSelection4 = vsoPageSource.Shapes("Process.14")
    
    ActiveWindow.DeselectAll
    Set vsoSelection = ActiveWindow.Selection
    
    vsoSelection.Select vsoShapeSelection1, visSelect
    vsoSelection.Select vsoShapeSelection2, visSelect
    vsoSelection.Select vsoShapeSelection3, visSelect
    vsoSelection.Select vsoShapeSelection4, visSelect
    
    vsoSelection.MoveToSubprocess vsoPageTarget, vsoMaster, vsoShapeNew
    
End Sub

运行代码后,你的源页面应该与图4所示类似。

图4。 源页面

技术分享

子流程页面应该类似于图5。

图5。 子流程页面

技术分享

结论

 

本文解释了如何使用三个新方法在2010年Visio Visual Basic应用程序(VBA)对象模型创建一个Visio 2010子过程流程图绘制。 方法创建新的子流程页面和形状和形状的选择这些页面移动。

以上是关于VB 在Visio 2010 以编程方式创建子进程图的主要内容,如果未能解决你的问题,请参考以下文章

python 模块积累-----subprocess

subprocess模块

使用 PhotoKit 在文件夹内创建子文件夹

python-subprocess

Linux创建子进程的函数说明

php多进程编程实现与优化