2012-08-03 128 views
1

我正在嘗試做最簡單的事情 - 在Visio中使用宏連接兩個2D圖形。 我已經下降了兩個形狀,添加到他們的連接點與「進」和「出」。 現在,當我試圖用鼠標連接它們時,它一切正常。 後來我已經錄製宏:在visio中連接兩個2D圖形

Sub Macro1() 

'Enable diagram services 
Dim DiagramServices As Integer 
DiagramServices = ActiveDocument.DiagramServicesEnabled 
ActiveDocument.DiagramServicesEnabled = visServiceVersion140 

Dim UndoScopeID1 As Long 
UndoScopeID1 = Application.BeginUndoScope("1") 
ActiveWindow.DeselectAll 
ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1), visSelect 
Application.ActiveWindow.Selection.Move -1.161417, 0.669291 
Dim vsoCell1 As Visio.Cell 
Dim vsoCell2 As Visio.Cell 
Set vsoCell1 = Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsU("PinX") 
Set vsoCell2 = Application.ActiveWindow.Page.Shapes.ItemFromID(15).CellsSRC(7, 0, 0) 
vsoCell1.GlueTo vsoCell2 
Dim vsoCell3 As Cell 
Dim vsoCell4 As Cell 
Set vsoCell3 = Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(visSectionConnectionPts, 0, 0) 
Set vsoCell4 = Application.ActiveWindow.Page.Shapes.ItemFromID(15).CellsSRC(visSectionConnectionPts, 0, 0) 
vsoCell3.GlueTo vsoCell4 
Application.EndUndoScope UndoScopeID1, True 

'Restore diagram services 
ActiveDocument.DiagramServicesEnabled = DiagramServices 

End Sub 

而且它不工作...如果我unglue那些形狀和運行錄製的宏,它會拋出「不適當源對象爲這次行動」

哪有我修復它?

回答

2

錄製宏時錄製的代碼對繪圖狀態非常具體。編輯繪圖時,它會非常快速地中斷。例如,記錄的代碼假定頁面上已經有一維形狀,並且在頁面的形狀集合中具有15的ID。錄製的宏中還有很多其他非常脆弱的假設。

我建議一個更好的方法是學習如何自己編寫宏,因爲您知道功能要求和您可以對繪圖狀態進行的假設。請參閱「開發Visio解決方案」一書的這一部分,瞭解如何編寫代碼來連接形狀:Creating a Connected Drawing from a Program

+0

非常感謝,帕特!我添加了控制柄到其中一個形狀,並嘗試粘貼它(不是在錄製宏中的PinX),它的工作! – JleruOHeP 2012-08-06 05:47:33