如何通过传递变量的形状名称来连接页面上的visio形状?

时间:2019-08-13 15:55:22

标签: excel vba visio

我正在尝试在图形中连接visio形状。我正在使用自动连接。我有一个循环,可以遍历绘图中的所有visio形状。它会遍历我范围内的值,并将它们与形状名称进行比较,如果形状名称匹配,则它应该连接到形状名称已存储在我的范围变量的偏移量(0,2)中的形状,但是将变量传递给脚本时出现问题。如果我对存储要连接的形状名称的变量进行调试打印,则它将打印以筛选循环中当前形状需要连接的形状的名称。因此它具有正确的数据。

这里是一些代码。

module = await Test.createTestingModule({
  imports: [ElasticsearchModule.register(...)],
  providers: [ElasticsearchService, clientFactory],
}).compile();

我需要能够将变量的内容传递给此语句。

 Dim conns As Range

    Dim connto_str As String

    Dim ew As Excel.Workbook

    Set ew = wbkInst.ActiveWorkbook

    Dim conns As Range

    Dim cel As Range

    Dim ws As Worksheet


    For Each ws In ew.Sheets

        Set conns = ws.Range("j3:j22")


        For Each cel In conns


            With cel

                c = cel.Value


                connto_str = cel.Offset(0, 2).Value  


            End With


            For Each node In ActivePage.Shapes

                If node.Name = c Then

                node.AutoConnect connto_str, visAutoConnectDirNone


                'Debug.Print connto_str


                Else

                End If


            Next node

        Next cel


    Next ws

谢谢

1 个答案:

答案 0 :(得分:1)

connto_str必须是Shape类型的对象,而不仅仅是Shape的名称。
如果您知道形状在哪一页上,则可以使用page.Shapes(“ ShapeName”)获得对该形状的引用。
来源:
Microsoft Docs Visio.Shape.AutoConnect Method
Microsoft Docs Shapes.Item Property

Dim ew As Excel.Workbook
Set ew = wbkInst.ActiveWorkbook

Dim ws As Worksheet
For Each ws In ew.WorkSheets 'use .WorkSheets, to avoid selecting other Sheet-Types like diagrams

    Dim conns As Range
    Set conns = ws.Range("j3:j22")

    Dim cel As Range
    For Each cel In conns.cells
        Dim c as String
        c = cel.Value

        Dim connto_str As String
        connto_str = cel.Offset(0, 2).Value

        Dim conno_shp as Shape
        Set conno_shp = activePage.Shapes(conno_shp)

        Dim node as Shape
        Set node = ActivePage.Shapes(c)

        node.AutoConnect connto_shp, visAutoConnectDirNone

    Next cel
Next ws

您还忘记了声明/昏暗节点。

尽管您仍然很脆弱,但是我还是整理了一下代码,因为您假设知道Shape的名称,实际上,Shape的名称可能会随着您的放置而改变。

您的变量名有点难以理解,您可能应该将其更改为更易读的名称,您的后继者将感谢您。使用不言自明的名称。

为什么不给出每种形状,您在用户部分下将一个条目放到ShapeSheet中,例如User.NetworkDiagrammName