【问题标题】:Counting shapes by name in Visio在 Visio 中按名称计算形状
【发布时间】:2013-05-15 07:52:29
【问题描述】:

我想计算图表中不同类型的形状,但我似乎无法完成。我想我必须为此编写一些代码。 为此,我使用 Visio 2007

我有一个流程图,其中大部分是我想按名称区分的过程形状。例如“A 型”、“B 型”。最后,我想要一个列表,告诉我我使用 A 型和 B 型的频率。手动计数容易出错。

我已经查看了报告/统计功能(我使用的是德语,所以恐怕我不能告诉您确切的菜单名称),您可以在其中自己定义报告功能,尽管一个错过了我需要的功能。我设法为我的形状制作了一份报告,但前提是它们都被选中了。但是当用户必须手动选择它们时,他也可以从一开始就计算它们......而且您必须点击 4-5 次才能获得静态报告结果。

我发现的另一个几乎有用的功能是图层方法:为我要计数的类型创建一个图层,然后将形状分配给该图层。但是,再一次,这太容易出错了。如果用户漏掉了一个形状,计数就会出错。

所以我想我需要用 VBA 编写一些代码。 此外,我希望在我的图表旁边有一个文本字段,其中始终显示结果所有类型的计数。这样当您添加 A 型形状时,您会看到计数增加了 1。

谁能帮我解决这个问题?

【问题讨论】:

    标签: vba visio


    【解决方案1】:

    尝试:

    Option Explicit
    
    Dim myShape As Shape
    
    Sub ShapesDetails()
    
        Call DeleteShapes(True)
    
        ActiveSheet.Shapes.AddShape(msoShapeRectangle, 139.5, 81.75, 72, 72).Select
        Selection.Name = "Rectangle"
        ActiveSheet.Shapes.AddShape(msoShapeSmileyFace, 252.75, 71.25, 72, 72).Select
        Selection.Name = "Smiley Face"
        Application.CutCopyMode = False
    
        Call ShapeDetails(True)
    
    End Sub
    
    Sub ShapeDetails(x As Boolean)
        For Each myShape In ActiveSheet.Shapes
            MsgBox "Shape name: " & myShape.Name & vbTab & " Shape type: " & myShape.Type
        Next
    End Sub
    
    Sub DeleteShapes(x As Boolean)
        For Each myShape In ActiveSheet.Shapes
            myShape.Delete
        Next
    End Sub
    

    【讨论】:

      【解决方案2】:

      使用 Data=reports = advanced 来配置报告以计算具有您的自定义形状属性(例如“MIO”)&& 存在的对象。 (或其他领域,有很多可供选择)。我将所有要计数的框设置为具有属性“MIO”=TRUE,然后选择显示属性 Displayed Text。在小计对话框和下一个窗口中的选项中需要一些摆弄才能使计数看起来不错。不勾选 COUNT,然后在选项对话框中启用“显示所有值”并勾选“从组中排除重复行”。

      输出为 XML Excel Viso 对象。我知道对于 visio 对象,要更新报告,请右键单击它=运行报告。

      HTH

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        相关资源
        最近更新 更多