2015-06-26 3 views
0

Я пытаюсь создать Visio изнутри Excel. Я могу получить фигуры, но метод autoconnect запускается с ошибкой «Ошибка несоответствия». Я также пробовал использовать метод GlueTo.VBA от excel не может visio autoconnect две формы

Не может быть, потому что shpObj не является реальной формой? Мне нужна помощь в том, как, если это так, и как лучше сохранить форму, или, если это возможно, сохранить форму.

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 

ответ

1

В VBA, при назначении объектов, вы должны использовать "Set":

If x = 4 Then 
    Set shpFrom = shpObj ' Note Set ! 
Else 
    .... 
Смежные вопросы