VBA Visio - 按价值自动排序项目(按字母顺序)

问题描述 投票:0回答:1

我想按照以下方式制作我的形状(如右边的红色列表):

不幸的是,我的原理图最初的顺序非常混乱,如您在左侧所见。

字母顺序只按水平排列,不按垂直排列。

我试图与代码作斗争,但它更像是交换一些“分支”。

      ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(925), visSelect
      ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1143), visSelect
      ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(814), visSelect
      ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1141), visSelect
      ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1142), visSelect
      Application.ActiveWindow.Selection.Move 0.224972, 2.302099

      ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1144), visSelect
      ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1017), visSelect
      ActiveWindow.Select Application.ActiveWindow.Page.Shapes.ItemFromID(1072), visSelect
      Application.ActiveWindow.Selection.Move 0.151857, 2.238548

另一种方法是:

    If Vshp.Name Like "*UG*" Then
        If Vshp.CellsSRC(visSectionCharacter, 0, visCharacterSize).FormulaU Like """"*NRTH-X*"""" Then

Sort Key1:=Range("SLD"), Order1:=xlAscending 万一 结束如果

我有错误,即:对象不支持此属性或方法。

是否有机会按升序(字母顺序)方式按形状对形状进行排序,类似于此线程: VBA visio - 无法更改元素中的字体大小

vba visio
1个回答
0
投票

如何处理文本值

如果你想以编程方式获取形状的文本,你必须使用 Text 属性 使用像

这样的语法

If Vshp.Text Like """"*NRTH-X*"""" Then

另一种使用INSTR函数的方法

If instr(Vshp.Text,"NRTH-X")>0 Then


这个解决方案展示了如何处理文本,而不是关于自动排序

对不起,我忘了像“NRTH-X”这样的文字有子形状.
同样在你的情况下,这个子形状没有文本,使用了字段。
尝试使用语法

If Vshp.Shapes(4).Characters.Text Like "**NRTH-X**" Then 

请看我这边的测试
Sub-Shape with field

在其他线程中,我已经多次写信给您,您使用一种复杂的方式在页面上尝试数字。
恕我直言,使用 CreateSelection 方法的最佳方式

© www.soinside.com 2019 - 2024. All rights reserved.