Как нарисовать форму клина с контуром в Excel VBA?

#excel #vba #drawing

#excel #vba #рисование

Вопрос:

Я хочу нарисовать сектор круга (то есть форму клина) с помощью VBA в Excel (настольная версия из Office 365 ProPlus). Приведенный ниже код дает мне правильную форму, но имеет только контур на изогнутом участке:

 Dim myArc as Shape
Set myArc = ActiveSheet.Shapes.AddShape(msoShapeArc, 200, 100, 100, 100)
With myArc
.Adjustments(1) = 0
.Adjustments(2) = 45
.Fill.Visible = msoTrue
End With
 

Прямые края не имеют контура, только изгиб. Как я могу получить контур по всей форме?Должен ли я использовать другую форму msoShapeArc ? Я пытался изменить цвет, вес и видимость линии, используя приведенный ниже код, но это влияет только на изогнутые края, а не на прямые.

 With myArc
.Line.ForeColor.RGB = RGB(0, 0, 0)
.Line.Weight = 1
.Line.Visible = msoTrue
End With
 

Мне удалось найти документацию по общим свойствам формы, но не по тому, какие свойства применяются к какому типу формы и как они на самом деле работают для управления ее внешним видом.

Комментарии:

1. Если вам нужна фигура с полным контуром, возможно msoShapePie , это будет лучший выбор

Ответ №1:

Согласно https://docs.microsoft.com/en-us/office/vba/api/excel.adjustments:

Поскольку каждая настраиваемая фигура имеет свой набор настроек, лучший способ проверить поведение настройки для конкретной фигуры — вручную создать экземпляр фигуры, внести настройки при включенном устройстве записи макросов, а затем просмотреть записанный код.

Это сработало для меня, чтобы создать клин пирога:

 Sub WedgeTest()
    Dim ws As Worksheet, shp As Shape
    Set ws = ActiveSheet
    
    Set shp = ws.Shapes.AddShape(msoShapePie, 50, 50, 100, 100)
    With shp
        .Adjustments.Item(1) = -90 'degrees from 3 oclock
        .Adjustments.Item(2) = -45 'degrees from 3 oclock
        .Fill.Visible = msoFalse
        With .Line
            .Visible = msoTrue
            .ForeColor.RGB = RGB(255, 0, 0)
            .Transparency = 0
        End With
    End With
End Sub
 

Обратите внимание, что градусы от 3 часов являются положительными (по часовой стрелке) или отрицательными (против часовой стрелки), но не могут превышать абсолютное значение 180, поэтому по часовой стрелке 190 градусов будет установлено как -170 (против часовой стрелки).