zoukankan      html  css  js  c++  java
  • 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图。

    Note 请注意

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

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

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

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

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

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

      Note 请注意

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

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

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

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

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

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

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

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

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

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

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

    创建一个流程图

     

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

    Note 请注意

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

    Important note 重要的

    虽然单位绘图页上的度量,你必须指定 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所示。 样画流程图

    Sample flowchart drawing

    在这个示例图,一个决定的一个分支形状导致容器形状封装子流程。 你必须使用一个容器的形状来表示这个子过程,因为这篇文章描述如何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。 源页面

    Source page

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

    图3。 子流程页面

    Subprocess page

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

     

    移动选择的形状从主进程页子流程页面,您可以使用 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。 源页面

    Source page

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

    图5。 子流程页面

    Subprocess page

    结论

     

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

  • 相关阅读:
    部署iis服务器与c#程序遇到的问题小结
    Installing node-oracledb on Microsoft Windows
    Navicat:cant create OCI environment.
    socket.io 中文手册 socket.io 中文文档
    现有的情绪
    Express 4.x Node.js的Web框架
    结构与类的对象在引用上的不同之处
    Android时间戳转换为标准Datetime(yyyy-MM-dd hh:mm:ss)格式
    ASP.NET MVC4中调用WEB API的四个方法
    安恒DASCTF 四月战 WP
  • 原文地址:https://www.cnblogs.com/endv/p/7087140.html
Copyright © 2011-2022 走看看