知识库 KB0073

如何使用 VBA 查明某形状是否已由 think-cell 使用?

think-cell 遇到的每个形状都由某标记进行标记。除了 PowerPoint 形状之外,think-cell 可能还会将特殊形状(ActiveDocument 容器)放置在幻灯片、幻灯片母版或自定义布局上。该 ActiveDocument 容器不可见,并包含有关 think-cell 对象的特殊信息。
在 PowerPoint 对象模型中,每个 PowerPoint.Shape 对象都具有 Tags 集合。think-cell 会设置特殊标记 thinkcellShapeDoNotDelete 以协助识别形状。对于 ActiveDocument 容器,该特殊标记的值将设为 thinkcellActiveDocDoNotDelete,对于 think-cell 控制的所有其他形状,该值会以 t 开头。

例如:如何检查是否存在 think-cell 形状?

以下 VBA 函数将展示如何使用特殊标记对指定的 PowerPoint.Shape 对象进行归类:

Sub CheckShape(oShape As PowerPoint.Shape)
    Dim str As String
    str = oShape.Tags.Item(Name:="thinkcellShapeDoNotDelete")
    If (str = "" Or Left$(str, 1) <> "t") Then
        MsgBox "PowerPoint shape"
    Else
        If str = "thinkcellActiveDocDoNotDelete" Then
            MsgBox "think-cell ActiveDocument"
        Else
            MsgBox "think-cell shape"
        End If
    End If
End Sub

您可以使用此函数来识别活动幻灯片上的所有形状:

Sub Test()
    Dim oShape As PowerPoint.Shape
    For Each oShape In ActiveWindow.View.Slide.Shapes
        Call CheckShape(oShape)
    Next oShape
End Sub

请注意在您复制形状(例如,通过复制并粘贴 think-cell 图表的方式)时,也会复制每个形状的标记集合。CheckShape 会报告 think-cell shape,以指出已包含在 think-cell 图表中的所有形状,即使已将形状复制并粘贴到其他演示文稿中,也是如此。

您可能也对以下文章感兴趣:KB0107:如何在 VBA 代码中复制粘贴 think-cell 图表?

分享