在Visio中按名称计算形状

时间:2013-05-15 07:52:29

标签: vba visio

我想在图表中计算不同类型的形状,而我似乎无法完成这项工作。我想我必须为此编写代码。 我使用 Visio 2007

我的流程图主要是流程形状,我希望按名称区分。例如“A型”,“B型”。最后,我希望有一个列表告诉我我经常使用A型和B型。手工计数会出错。

我已经查看了报告/统计功能(我在德语中使用它,所以我恐怕无法告诉你确切的菜单名称),你可以自己定义报告功能,尽管一个人错过了我需要的功能。我设法为我的形状做了一个报告,但只有当它们都被选中时才会报告。但是当用户必须手动选择它们时,他也可以从一开始就对它们进行计数......然后你必须进行4-5次点击以获得静态报告结果。

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

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

有人可以帮我吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用Data = reports = advanced配置报表以计算具有自定义形状属性的对象(例如“MIO”)&&存在。 (或另一个领域,很多可供选择)。我将所有想要计算的框设置为具有属性'MIO'= TRUE,然后选择显示属性显示文本。它需要在Subtotals对话框和下一个窗口中的选项中进行一些调整,以使计数看起来不错。保留COUNT未选中状态,并在选项对话框中启用“显示所有值”并勾选“从组中排除重复行”。

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

HTH