Powerpoint VBA - 编写创建形状的函数

Powerpoint VBA - write function to create shape

我有以下功能,我打算创建一个形状:

Public Function LinkToAddInfo(ShapeName As String, BoxName As String, DisplayNumber As Long, AddName As String, TrueNumber As Long) As Shape

        Dim ShapeName As Shape
        Set ShapeName = .Shapes.AddShape(msoShapeRoundedRectangle, 640, 470, 71, 27)

        With ShapeName
            .Fill.ForeColor.RGB = RGB(191, 191, 191)
            .Fill.Transparency = 0
            .Name = BoxName

            With .Line
            .Weight = 0
            .ForeColor.RGB = RGB(191, 191, 191)
            .Transparency = 0
            End With ' Outline

            With .TextFrame.TextRange
              .Text = "Add. Info " & DisplayNumber & vbNewLine & AddName
               With .Font
                .Name = "Arial"
                .Size = 8
                .Bold = msoTrue
                .BaselineOffset = 0
                .AutoRotateNumbers = msoFalse
                .Color.RGB = RGB(255, 255, 255)
            End With   ' Font

           End With   ' TextFrame

        End With ' Square itself

End Function

我尝试使用以下方法从模块中调用它:

LinkToAddInfo("tiny1", "Yedinfo1", DisplayNumber, AddName, AddNumber)

但是它会抛出错误(代码在编辑器中显示为红色)。

当我在模块本身中包含所有代码时,它工作正常。我只是在努力将它转录成一个外部函数(我想这样做,这样我就不必一次又一次地重复这段代码)。

我怎样才能做到这一点?

你对此有几个问题。

  • 您不需要为此使用函数,因为您没有向程序返回数据。相反,使用 Sub.
  • 第一个参数是字符串,但随后您尝试在声明中使用与形状相同的变量名。但是您不对任何内容使用字符串参数,因此可以将其删除。你也不用TrueNumber,这样可以去掉
  • 要访问幻灯片母版,您需要使用带有数字参数的设计,而不是 SlideMaster。 以下应该做你想做的:
Public Sub LinkToAddInfo(BoxName As String, DisplayNumber As Long, AddName As String)
    Dim oShape As Shape
    Set oShape = ActivePresentation.Designs(1).SlideMaster.Shapes.AddShape(msoShapeRoundedRectangle, 640, 470, 71, 27)

    With oShape
        .Fill.ForeColor.RGB = RGB(191, 191, 191)
        .Fill.Transparency = 0
        .Name = BoxName
        With .Line
        .Weight = 0
        .ForeColor.RGB = RGB(191, 191, 191)
        .Transparency = 0
        End With ' Outline
        With .TextFrame.TextRange
            .Text = "Add. Info " & DisplayNumber & vbNewLine & AddName
            With .Font
                .Name = "Arial"
                .Size = 8
                .Bold = msoTrue
                .BaselineOffset = 0
                .AutoRotateNumbers = msoFalse
                .Color.RGB = RGB(255, 255, 255)
            End With   ' Font
        End With   ' TextFrame
    End With ' Square itself
End Sub
```