#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 (против часовой стрелки).