2012-08-03 2 views
1

가장 간단한 것을 시도하고 있습니다 - GlueTo를 사용하여 매크로를 사용하여 visio에서 두 개의 2 차원 도형을 연결하십시오. "In"과 "Out"이있는 연결 지점에 두 개의 도형을 추가했습니다. 이제 마우스와 연결하려고 할 때 괜찮습니다. 내가 그 모양을 unglue 및 기록 된 매크로를 실행하면, 그것은visio에서 두 개의 2 차원 도형을 연결하십시오.

어떻게 "이 작업에 대한 부적절한 소스 개체"를 던질 것입니다 ...

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 

그리고 그것은 작동하지 않습니다 : 은 그 때 나는 매크로를 기록했다 고쳐?

답변

2

기록 된 코드는 매크로를 기록 할 때 도면 상태와 매우 관련이 있습니다. 도면을 편집 할 때 매우 빨리 중단됩니다. 예를 들어, 기록 된 코드는 이미 페이지에 1 차원 모양이 있고 페이지의 모양 컬렉션에 ID가 15라고 가정합니다. 기록 된 매크로에는 다른 많은 매우 취약한 가설이 있습니다.

더 나은 방법은 기능 요구 사항과 드로잉 상태에 대한 가정을 알고 있으므로 매크로를 직접 코딩하는 방법을 배우는 것입니다. 셰이프를 함께 연결하는 코드를 작성하는 방법은 Visio 솔루션 개발의이 섹션을 참조하십시오 (Creating a Connected Drawing from a Program).

+0

대단히 감사합니다, 팻! 나는 모양 중 하나에 컨트롤 핸들을 추가하고 그것을 붙이려고했는데 (녹음 된 매크로처럼 PinX가 아님) 작동했습니다! – JleruOHeP

관련 문제