VBA PowerPoint 2016在.ConvertToShape之后形成BuildFreeform属性

VBA PowerPoint 2016在.ConvertToShape之后形成BuildFreeform属性,vba,powerpoint,shapes,presentation,powerpoint-2010,Vba,Powerpoint,Shapes,Presentation,Powerpoint 2010,使用.ConvertToShape创建形状后,其形状索引是什么?我怎么给它一个线条颜色?我想创建几个MSOFreform形状,并给它们不同的颜色。我已经走了这么远: With myDocument.Shapes.BuildFreeform(EditingType:=msoEditingCorner, X1:=X(1), Y1:=Y(1)) For i = 1 To 361 .AddNodes SegmentType:=msoSegmentLine, EditingType:=ms

使用.ConvertToShape创建形状后,其形状索引是什么?我怎么给它一个线条颜色?我想创建几个MSOFreform形状,并给它们不同的颜色。我已经走了这么远:

With myDocument.Shapes.BuildFreeform(EditingType:=msoEditingCorner, X1:=X(1), Y1:=Y(1))
    For i = 1 To 361
    .AddNodes SegmentType:=msoSegmentLine, EditingType:=msoEditingAuto, X1:=X(i), Y1:=Y(i)
    Next i
    .ConvertToShape
End With

For Each shp In ActivePresentation.Slides(1).Shapes
    If shp.Type = 5 Then 'msoFreeform
    shp.Line.ForeColor.RGB = RGB(0, 0, 64) 'this will however colour all in the same colour
    shp.Line.Weight = 2.5
    End If
    Debug.Print shp.Type
Next shp

我想给创建的自由形式加一种颜色,然后创建另一个自由形式,给它另一种颜色,等等,对于几个自由形式。感谢您的帮助。

一般来说,最好提供一个独立运行的示例,这样任何愿意提供帮助的人都可以从简单的复制/粘贴开始,而不必修改代码

在任何情况下,.ConvertToShape都会返回对新创建形状的引用,因此您可以立即使用该引用来设置颜色或任何您喜欢的属性。在这里,我只是抓取新形状的名称并将其显示在messagebox中:

Sub TryThis()

Dim oSh As Shape
Dim i As Long

With ActivePresentation.Slides(1).Shapes.BuildFreeform(EditingType:=msoEditingCorner, X1:=x(1), Y1:=y(1))
    For i = 1 To 361
    .AddNodes SegmentType:=msoSegmentLine, EditingType:=msoEditingAuto, X1:=x(i), Y1:=y(i)
    Next i
    Set oSh = .ConvertToShape
    MsgBox oSh.Name
    
End With

End Sub

你的评论是什么意思“这将使所有的颜色都相同”?您是否希望形状轮廓具有多种颜色?或者你是说所有的形状都有相同的轮廓?我意识到不可能在一个形状中得到不同的颜色。我至少应该试着给每个形状换上不同的颜色。史蒂夫的答案正是我想要的。在此之前,我写了以下内容。k=ActivePresentation.Slides(1).Shapes.Count With ActivePresentation.Slides(1).Shapes(k).Line.ForeColor.RGB=RGB(255-32*n,0+32*n,192).Line.ForeColor.RGB=RGB(255*Rnd(),255*Rnd(),255*Rnd()).Line.Weight=2.Fill.Transparency=1以结尾(我不知道如何将其格式化为代码。)