1. 程式人生 > >VB 在Visio 2010 以編程方式創建子進程圖

VB 在Visio 2010 以編程方式創建子進程圖

保存 圖文 link connected 修改 nts .aspx 簡單的 能夠

在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 方法在英寸。

VBA
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編輯和運行它。

VBA
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編輯和運行它。

VBA
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編輯和運行它。

VBA
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子過程流程圖繪制。 方法創建新的子流程頁面和形狀和形狀的選擇這些頁面移動。

額外的資源

2010年Visio圖表添加結構

矢量繪圖軟件開發中心

Visio見解的博客

辦公客戶端開發人員博客內容

VB 在Visio 2010 以編程方式創建子進程圖