使用 VBA 删除 Power Point 幻灯片中的现有图表并替换为新图表

Delete existing chart in Power Point slide and replace by new chart using VBA

我正在编写 VBA 代码以将粘贴图表从 excel 复制到 PowerPoint。我的代码将首先从 PowerPoint 幻灯片中删除现有图表,然后再从 excel 复制粘贴图表。

不幸的是,一些图表在 PowerPoint 中被命名为“Content Placeholder xx”,因此演示文稿中的现有图表不会被删除。由于内容占位符可以是table/现成的形状/图表,我如何测试内容占位符是图表还是其他形状?

任何指导将不胜感激

Sub Powerpoint_Slide_MoveChart()

    '// General declaration
    Dim ppt             As PowerPoint.Application
    Dim ActiveSlide     As PowerPoint.Slide
    Dim Cht             As ChartObject
    Dim i               As Integer

    '// Set powerpoint application
    Set ppt = GetObject(, "PowerPoint.Application")

    '// Check if more then single powerpoint open
    If ppt.Presentations.Count > 1 Then
        MsgBox "Please close all other powerpoints except the one you would like to puiblish."
        Exit Sub
    End If

    '// Set active slide as slide 9
    Set ActiveSlide = ppt.ActivePresentation.Slides(9)
    ppt.ActiveWindow.View.GotoSlide (9)
    Set Cht = ActiveSheet.ChartObjects("ChartSlide9")

    '// Delete existing chart
    For i = 1 To ActiveSlide.Shapes.Count
        If Left(UCase(ActiveSlide.Shapes(i).Name), 5) = "CHART" Then
            ActiveSlide.Shapes(i).Delete
            Exit For
        End If
    Next i
 End Sub

您可以使用 Shape 对象的 HasChart 属性 来测试一个形状是否包含图表...

If ActiveSlide.Shapes(i).HasChart Then

如果您还想测试图表的名称,在测试形状是否有图表后...

If ActiveSlide.Shapes(i).Chart.Name = "Chart Name" Then

使用 Shapes.Chart 属性

Sub Sample()
    Dim chrt As Chart

    With ActivePresentation
        For i = 1 To .Slides(1).Shapes.Count
            On Error Resume Next
            Set chrt = .Slides(1).Shapes(i).Chart
            On Error GoTo 0

            If Not chrt Is Nothing Then
                MsgBox "Guess what? " & .Slides(1).Shapes(i).Name & " is a chart"
                Set chrt = Nothing
            Else
                MsgBox .Slides(1).Shapes(i).Name & " is not a chart"
            End If
        Next i
    End With
End Sub