VB 在Visio 2010 以编程方式创建子进程图
在2010年Visio以编程方式创建子进程图
简介: 学习如何创建子流程图表以编程方式在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移动到指定的页面,选择源页面上滴一个替换的形状,然后更换形状到目标页面的链接。 返回了形状的选择在目标页面。
在一般情况下,您使用下列程序以编程方式创建一个子过程图。
以编程方式创建一个子过程图
2010年Visio创建流程图文档,添加形状,适当的,代表了整个过程。
你可以做这个图的全部或部分以编程方式创建。
识别的流程图形状或形状你想代表并链接到一个或更多的子过程或子过程,每一个页面上一个单独的子流程。
使用 CreateSubProcess 方法在每一个这样的形状来创建一个新的子流程页面在同一个文档。
通过新创建的页面 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。

在这个示例图,一个决定的一个分支形状导致容器形状封装子流程。 你必须使用一个容器的形状来表示这个子过程,因为这篇文章描述如何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所示。
|
的名字 |
必需的/可选 |
数据类型 |
描述 |
|---|---|---|---|
|
页面 |
要求 |
形状的子流程页面应该感动。 你不能通过当前页面。 |
|
|
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。

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

移动选择形状的子流程页面
移动选择的形状从主进程页子流程页面,您可以使用 Selection.MoveToSubprocess 方法。 Selection.MoveToSubprocess 将作用于两个或两个以上的选择吗 形状 对象的任意组合简单的形状和容器,或选择一个容器 形状 对象,是否包含成员的形状。
的 Selection.MoveToSubprocess 方法的参数如表2所示。
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所示类似。

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

结论
本文解释了如何使用三个新方法在2010年Visio Visual Basic应用程序(VBA)对象模型创建一个Visio 2010子过程流程图绘制。 方法创建新的子流程页面和形状和形状的选择这些页面移动。
VB 在Visio 2010 以编程方式创建子进程图的更多相关文章
- Android开发之UI的编程方式创建
我们知道,android中一个activity对应一个xml的UI配置文件,除了用xml文件配置的方式创建用户界面外,还可以使用代码编程的方式来创建一个用户界面.如果用户界面需要在运行过程中动态生成的 ...
- 如何以编程方式签署应用程序包(C ++)
了解如何使用SignerSignEx2函数对应用包进行签名. 如果要使用Packaging API以编程方式创建Windows应用商店应用包,则还需要在部署之前对应用包进行签名.Packaging A ...
- 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件
以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件 2007/10/29 Mark BukovecEmpire Down Development 适用于:Mi ...
- word 2010中设置默认粘贴为 只保留文本粘贴【visio也适用于快捷键方式】
VISIO也适用如下方式: 3. 当然也可以直接是 Ctrl + Alt + V打开选择性粘贴选项卡 来选择其中某项来粘贴也是可以的 转: word 2010中设置默认粘贴为 只保留文本粘贴 2012 ...
- Microsoft Office Visio 2010如何创建UML 用例图
转自:https://blog.csdn.net/mmoooodd/article/details/10513059 1..在Microsoft Office2010中打开Microsoft Visi ...
- 在 ASP.NET 网页中不经过回发而以编程方式实现客户端回调
在 ASP.NET 网页的默认模型中,用户会与页交互,单击按钮或执行导致回发的一些其他操作.此时将重新创建页及其控件,并在服务器上运行页代码,且新版本的页被呈现到浏览器.但是,在有些情况下,需要从客户 ...
- ASP.NET MVC下的四种验证编程方式[续篇]
在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...
- ASP.NET MVC下的四种验证编程方式
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...
- ASP.NET MVC下的四种验证编程方式【转】
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...
随机推荐
- C++ cin.ignore()用法
cin.ignore(int a,char b); a为一行中最大读取字符长度,b为某一个字符.在缓冲区中寻找b,找到后忽略b以前的所有字符(包括b).如果在a的范围内还没有找到b,则忽略b以前的所有 ...
- ubuntu16.04安装最新版本的wine
1.安装源 sudo add-apt-repository ppa:wine/wine-builds sudo apt-get update 2.安装wine sudo apt-get install ...
- gvim代码补全
gvim 代码自动提示 插件 插件名:AutoComplPop 下载地址:http://www.vim.org/scripts/script.php?script_id=1879 gvim 代码模板补 ...
- 图灵杯 E 简单的RMQ(UVA 11235)(RMQ)
E: 简单的RMQ 时间限制: 2 Sec 内存限制: 64 MB提交: 934 解决: 165[提交][状态][讨论版] 题目描述 给定一个数组,其中的元素满足非递减顺序.任意给定一个区间[i, ...
- poj 2940
Wine Trading in Gergovia Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3187 Accepte ...
- 关于SOA
什么是SOA SOA:面向服务的体系结构(Service-Oriented Architecture,SOA,也叫面向服务架构), SOA是指为了解决在Internet环境下业务集成的需要,通过连接能 ...
- 【循环节】【矩阵乘法】MIPT-2016 Pre-Finals Workshop, Taiwan NTU Contest, Sunday, March 27, 2016 Problem F. Fibonacci of Fibonacci
题意:F(n)为斐波那契数列的第n项,问你F(F(n)) mod 20160519的值. 发现有循环节,F(26880696)=0,F(26880697)=1,.... 于是两次矩乘快速幂即可. #i ...
- 升级到XCode6后,iOS8里设置tableview的setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法
我们在使用tableview时会发现分割线的左边会短一些,通常可以使用 setSeparatorInset:UIEdgeInsetsZero 来解决.但是升级到XCode6之后,在iOS8里发现没有效 ...
- 对学生排序 Exercise07_17
import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:对学生排序 * */ public class Exercise07_17 ...
- oracle数据库,mybatis批量insert,缺失values字段
报错:### Error updating database. Cause: java.sql.SQLException: ORA-00926: 缺失 VALUES 关键字### The error ...
重要的