2012-08-03 87 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