VBA PowerPoint 2016 формирует свойства BuildFreeform после .ConvertToShape - PullRequest
0 голосов
/ 13 июля 2020

После создания фигуры с помощью .ConvertToShape, каков ее индекс в Shapes? И как мне дать ему цвет линии? Я хочу создать несколько форм msoFreeform и дать им разные цвета. Я зашел так далеко:

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

Я хотел бы придать цвет созданной произвольной форме, затем создать другую произвольную форму и дать ей другой цвет и так далее для нескольких произвольных форм. Спасибо за любую помощь.

1 Ответ

1 голос
/ 14 июля 2020

Как правило, рекомендуется предоставить пример, который работает сам по себе, чтобы любой, кто хотел бы помочь, мог начать с простого копирования / вставки, вместо того, чтобы адаптировать ваш код.

В любом случае .ConvertToShape возвращает ссылку на вновь созданную фигуру, поэтому вы можете сразу использовать эту ссылку для установки цвета или любых других свойств, которые вам нравятся. Здесь я просто беру имя новой формы и показываю его в окне сообщения:

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
...