我正在尝试在图形中连接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
谢谢
答案 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
。