向幻灯片添加形状并设置格式

elt*_*ron 2 powerpoint vba

我正在尝试使我的 vba 脚本在下面添加注释到 powerpoint 幻灯片。这个想法是该脚本可用于向幻灯片添加“待检查笔记”。因此,我在一个显示菜单的小插件中设置了它,因此添加了 TBC、TBU、TBD 注释。sub 不时显示错误并且并不总是完全完成它的工作(我猜是因为我在代码中写的部分:

ActiveWindow.Selection.SlideRange.Shapes("Rectangle 4").Select
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我如何使脚本防弹。对该方法的简短解释会很棒。这样我就可以学习如何在未来做正确的事情。

最好的事物,

艾替布隆

这是我的整个脚本到目前为止的样子:

Sub InsertShape_TBC()

ActiveWindow.Selection.SlideRange.Shapes.AddShape(msoShapeRectangle, 575.5, 9.12, 124.75, 34.12).Select
With ActiveWindow.Selection.ShapeRange
    .Fill.Visible = msoTrue
    .Fill.Solid
    .Fill.ForeColor.RGB = RGB(162, 30, 36)
    .Fill.Transparency = 0#
    .Line.Visible = msoFalse
End With
ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Select
ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Characters(Start:=1, Length:=0).Select
With ActiveWindow.Selection.TextRange
    .Text = "[TBC]"
    With .Font
        .Name = "Arial"
        .Size = 18
        .Bold = msoFalse
        .Italic = msoFalse
        .Underline = msoFalse
        .Shadow = msoFalse
        .Emboss = msoFalse
        .BaselineOffset = 0
        .AutoRotateNumbers = msoFalse
        .Color.SchemeColor = ppForeground
    End With
End With
ActiveWindow.Selection.SlideRange.Shapes("Rectangle 4").Select
ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Select
ActiveWindow.Selection.SlideRange.Shapes("Rectangle 4").Select
ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Select
ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Characters(Start:=1, Length:=6).Select
ActiveWindow.Selection.TextRange.Font.Bold = msoTrue
ActiveWindow.Selection.TextRange.Font.Color.RGB = RGB(Red:=255, Green:=255, Blue:=255)
ActivePresentation.ExtraColors.Add RGB(Red:=255, Green:=255, Blue:=255)
ActiveWindow.Selection.Unselect
End Sub
Run Code Online (Sandbox Code Playgroud)

Ste*_*erg 5

这看起来像早期版本的 PPT 中宏记录器生成的那种代码。

首先,永远不要在代码中选择任何东西,除非绝对有必要这样做(而且很少这样做)。改用形状引用(正如您在我为回答您的其他问题而发布的其他几个示例中所见)。

由于录制的宏假定您正在使用名为 Rectangle 4 的形状,因此只有在已经具有三个矩形的幻灯片上运行它时,它才会起作用。所以与其:

Dim oSh as Shape
Set oSh = ActiveWindow.Selection.SlideRange.Shapes.AddShape(msoShapeRectangle, 575.5, 9.12, 124.75, 34.12)
' Notice that I removed the .Select from the end of your code.  
' We don't want to select anything if we don't have to.

' Then
With oSh
   With .TextFrame.TextRange
      .Text = "[TBC]"
       With .Font
        .Name = "Arial"
        .Size = 18
        .Bold = msoFalse
        .Italic = msoFalse
        .Underline = msoFalse
        .Shadow = msoFalse
        .Emboss = msoFalse
        .BaselineOffset = 0
        .AutoRotateNumbers = msoFalse
        .Color.SchemeColor = ppForeground
    End With   ' Font
   End with   ' TextRange
End With   ' oSh, the shape itself
Run Code Online (Sandbox Code Playgroud)