从Excel的VBA不能Visio自动连接两个形状

我正试图从Excel内部生成一个Visio。 我可以看到形状,但autoconnect方法炸弹与“types不匹配”错误。 我也尝试了GlueTo方法,没有运气。

难道是因为shpObj不是一个真正的形状? 我需要帮助,看看如果是这种情况,如何更好地存储形状,或者如果可能,保留shapeID。

shpFrom只是第一个shpObj …下面是我如何将形状放入Visio:

Set shpObj = AppVisio.ActiveWindow.Page.Drop(AppVisio.Documents.Item("Computers and Monitors.vss").Masters.Item("PC"), dXPos, yPos)

以下是我如何连接它们的方法:

shpObj.AutoConnect shpFrom, visAutoConnectDirUp

看起来挺直的,但是我不能得到它的工作。 这里是所有的代码:

 Sub VisioFromExcel() Set AppVisio = CreateObject("visio.application") AppVisio.Visible = True AppVisio.Documents.AddEx "Basic Network Diagram.vst", visMSmetric, 0 ComputerStencil = AppVisio.Documents.AddEx("Computers and Monitors.vss", visOpenRO + visOpenDocked) Connector = AppVisio.Documents.AddEx("Connectors.vss", visOpenRO + visOpenDocked) AppVisio.Windows.ItemEx(1).Activate dXPos = AppVisio.ActivePage.PageSheet.Cells("PageWidth") / 2 dYPos = AppVisio.ActivePage.PageSheet.Cells("PageHeight") / 2 yPos = 1 For x = 4 To 6 'For x = 4 To Worksheets("Inventory").Cells(Rows.Count, 1).End(xlUp).Row Set shpObj = AppVisio.ActiveWindow.Page.Drop(AppVisio.Documents.Item("Computers and Monitors.vss").Masters.Item("PC"), dXPos, yPos) If x = 4 Then shpFrom = shpObj Else 'shpObj.GlueTo shpFrom 'Set line1 = AppVisio.ActiveWindow.Page.Drop(AppVisio.ConnectorToolDataObject, 1, 2) 'line1.CellsU("BeginX").GlueTo shpFrom.CellsU("PinX") 'line1.CellsU("EndX").GlueTo shpObj.CellsU("PinX") shpObj.AutoConnect shpFrom, visAutoConnectDirUp End If 'Level testing for positioning? 'If Len(objName) > 0 Then 'End If objName = Worksheets("Inventory").Cells(x, 1).Value shpObj.Text = objName yPos = yPos - 1.25 Next 'AppVisio.ActiveWindow.Page.CenterDrawing AppVisio.ActiveWindow.Page.ResizeToFitContents Set AppVisio = Nothing End Sub 

在VBA中,分配对象时,应该使用“Set”:

 If x = 4 Then Set shpFrom = shpObj ' Note Set ! Else ....