在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 以编程方式创建子进程图的更多相关文章

  1. Android开发之UI的编程方式创建

    我们知道,android中一个activity对应一个xml的UI配置文件,除了用xml文件配置的方式创建用户界面外,还可以使用代码编程的方式来创建一个用户界面.如果用户界面需要在运行过程中动态生成的 ...

  2. 如何以编程方式签署应用程序包(C ++)

    了解如何使用SignerSignEx2函数对应用包进行签名. 如果要使用Packaging API以编程方式创建Windows应用商店应用包,则还需要在部署之前对应用包进行签名.Packaging A ...

  3. 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件

    以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件 2007/10/29 Mark BukovecEmpire Down Development 适用于:Mi ...

  4. word 2010中设置默认粘贴为 只保留文本粘贴【visio也适用于快捷键方式】

    VISIO也适用如下方式: 3. 当然也可以直接是 Ctrl + Alt + V打开选择性粘贴选项卡 来选择其中某项来粘贴也是可以的 转: word 2010中设置默认粘贴为 只保留文本粘贴 2012 ...

  5. Microsoft Office Visio 2010如何创建UML 用例图

    转自:https://blog.csdn.net/mmoooodd/article/details/10513059 1..在Microsoft Office2010中打开Microsoft Visi ...

  6. 在 ASP.NET 网页中不经过回发而以编程方式实现客户端回调

    在 ASP.NET 网页的默认模型中,用户会与页交互,单击按钮或执行导致回发的一些其他操作.此时将重新创建页及其控件,并在服务器上运行页代码,且新版本的页被呈现到浏览器.但是,在有些情况下,需要从客户 ...

  7. ASP.NET MVC下的四种验证编程方式[续篇]

    在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...

  8. ASP.NET MVC下的四种验证编程方式

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...

  9. ASP.NET MVC下的四种验证编程方式【转】

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...

随机推荐

  1. 在CentOS7.5的虚拟环境下新建你的django项目

    1.首先安装pyenv和virtualenvs,之前的博客有说安装过程 2.创建Django专用的虚拟环境[root@localhost ~]# mkdir Django_env[root@local ...

  2. Aras Innovator DB备份与还原

    错误信息 确认到该问题是因为孤立帐号的问题,在解决孤立帐号之前,可以通过语句查看,另外,还原了DB后,系统不会自动创建原来的登陆帐号的,需要手动新增登陆帐号 #查看孤立帐号列表exec sp_chan ...

  3. 解决Windows10与Ubuntu系统时间不一致问题

    前言: 安装完windows与Ubuntu双系统之后会发现windows与Ubuntu时间不一致.这是硬件时间都一样的情况下,Ubuntu使用的是UST,Windows使用的是CST.要解决该问题就要 ...

  4. BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树

    3261: 最大异或和 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 3519  Solved: 1493[Submit][Status][Discu ...

  5. 洛谷P2556 [AHOI2002] 黑白图像压缩 [模拟]

    题目传送门 黑白图像压缩 题目描述 选修基础生物基因学的时候, 小可可在家里做了一次图像学试验. 她知道:整个图像其实就是若干个图像点(称作像素)的序列,假定序列中像素的个数总是 8 的倍数, 于是每 ...

  6. Single Number III(LintCode)

    Single Number III Given 2*n + 2 numbers, every numbers occurs twice except two, find them. Example G ...

  7. 从Windows复制文件到Linux显示乱码问题

    (1).文件名乱码 这并不是所有人都会碰到的问题,一般常见于使用putty的用户.使用convmv命令可以解决这个问题. 我写详细一点还原真实场景,首先我来上传一个测试文件“a此文件在windows下 ...

  8. PHP:根据二维数组中的某个字段进行排序

    首先了解下以下两个函数: 1.array_column() 返回输入数组中某个单一列的值. 2.array_multisort() 函数返回排序数组.您可以输入一个或多个数组.函数先对第一个数组进行排 ...

  9. 某5道CF水题

    1.PolandBall and Hypothesis 题面在这里! 大意就是让你找一个m使得n*m+1是一个合数. 首先对于1和2可以特判,是1输出3,是2输出4. 然后对于其他所有的n,我们都可以 ...

  10. HDU 6039 Gear Up(线段树+并查集)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6039 [题目大意] 给出一些齿轮,有些齿轮是边相连,也就是拥有相同的线速度, 有的齿轮是轴相连,也 ...