对幻灯片中生成图形所需的VBA代码进行反向工程

对幻灯片中生成图形所需的VBA代码进行反向工程,vba,powerpoint,Vba,Powerpoint,我正在寻找一种方法来重新设计VBA代码,我需要在PowerPoint中创建某种视觉效果 例如,我想创建代码来创建: 现在,我编写了以下VBA代码,允许您突出显示powerpoint中使用的形状: Sub ListAllShapes() Dim curSlide As Slide Dim curShape As Shape For Each curSlide In ActivePresentation.Slides Debug.Print curSlide.SlideNumber

我正在寻找一种方法来重新设计VBA代码,我需要在PowerPoint中创建某种视觉效果

例如,我想创建代码来创建:

现在,我编写了以下VBA代码,允许您突出显示powerpoint中使用的形状:

Sub ListAllShapes()

Dim curSlide As Slide
Dim curShape As Shape

For Each curSlide In ActivePresentation.Slides
    Debug.Print curSlide.SlideNumber
    For Each curShape In curSlide.Shapes


                MsgBox curShape.Name


    Next curShape
Next curSlide
End Sub
如果我使用我的示例运行此命令,我将获得以下输出:

自形7

但是,当我在这里查找Shape.name时:我看到Autoshpape 7是msoshapeIsosecleStrangle。如果我随后插入以下代码:

Sub InsertShape()

Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes.AddShape Type:=msoShapeIsoscelesTriangle, _
    Left:=50, Top:=50, Width:=100, Height:=200


End Sub
我得到了一张不同的图表,你认为我哪里出了问题吗


自选图形名称不是自选图形类型。它们是两种不同的属性。这是一个宏,用于将所有形状添加到幻灯片中。然后在此页面上查找数字以获取VBA自选单倍体名称:


自选图形名称不是自选图形类型。它们是两种不同的属性。这是一个宏,用于将所有形状添加到幻灯片中。然后在此页面上查找数字以获取VBA自选单倍体名称:


也许看看:你可以试着用Word或Excel记录宏,看看它能给你带来什么。它们都使用相同的Microsoft引擎来处理形状对象。也许可以看看:你可以尝试在Word或Excel中录制宏,看看它能给你带来什么。它们对形状和对象都使用相同的Microsoft引擎。
Sub MakeShapes()
    Dim T As Long, L As Long
    Dim oShape As Shape, oText As Shape

    T = 0
    L = 0
    x = 1
    For y = 1 To 15
        For Z = 1 To 26
            On Error GoTo NoShape
            Set oShape = ActiveWindow.Selection.SlideRange.Shapes.AddShape(Type:=x, Left:=L, Top:=T, Width:=30, Height:=30)
            On Error GoTo -1
            Set oText = ActiveWindow.Selection.SlideRange.Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, Left:=L, Top:=T + 36, Width:=36, Height:=18)
            With oText.TextFrame2.TextRange
                .Text = oShape.AutoShapeType
                .Font.Size = 10
            End With
            Set oShape = Nothing
            Set oText = Nothing
            L = L + 36
NoShape:
            x = x + 1
            If x = 184 Then Exit Sub
        Next Z
        L = 0
        T = T + 71
    Next y
End Sub