Размещение меток на пончиковой диаграмме - PullRequest
1 голос
/ 06 марта 2019

У меня есть следующий код, который пытается добавить метку к точке в комбинированной кольцевой / круговой диаграмме:

    For Each co In .ChartObjects
        With co.Chart.FullSeriesCollection("Grøn pil").Points(2)
            .HasDataLabel = True
            With .DataLabel
                .Position = xlLabelPositionOutsideEnd
                .Format.AutoShapeType = msoShapeRectangle
                .Format.Line.Visible = msoTrue
            End With
        End With
    Next co

Однако код прерывается в строке .Position = xlLabelPositionOutsideEnd с сообщением об ошибкеMsgstr "Ошибка времени выполнения 2147467259 (80004005)".Метод 'Положение' объекта 'DataLabel' не выполнен ".

При просмотре диаграммы метка была добавлена, но она все еще расположена внутри диаграммы.

enter image description here

Как вы можете видеть, я уже разместил метку за пределами диаграммы для другой серии, которая представлена ​​в виде круговой диаграммы. В то время как серия, к которой я пытаюсь добавить метку, представлена ​​в видекольцевая диаграмма.

Разве я не могу иметь обе метки для кольцевой и круговой диаграммы снаружи? Разве xlLabelPositionOutsideEnd не является допустимой позицией для меток кольцевой диаграммы? Илипроблема что-то еще, что ускользает от меня?

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 06 марта 2019

Я не думаю, что возможно делать именно то, что вы хотите делать так, как вы хотите это сделать!Опция размещения надписей за пределами графика недоступна для параметров кольцевой диаграммы:

Missing options on doughnut chart

, как на круговой диаграмме:

Label position options on a pie chart

Однако вы можете выполнить трюк, используя круговую диаграмму и белый круг, чтобы он выглядел как пончик, выполнив следующие действия:

Sub AddCircle()
    'Get chart size and position:
        Dim CH01 As Chart: Set CH01 = ThisWorkbook.Sheets("Sheet1").ChartObjects("Chart1").Chart
        Dim OB01 As ChartObject: Set OB01 = CH01.Parent
        Dim x As Double: x = 0 'horizontal coordinate
        Dim y As Double: y = 0 'vertical coordinate
        Dim w As Double: w = 0 'width
        Dim h As Double: h = 0 'height
        x = OB01.Left
        y = OB01.Top
        w = OB01.Width
        h = OB01.Height
    'Adding the circle:
        ThisWorkbook.Sheets("Sheet1").Shapes.AddShape(msoShapeOval, x + w / 2 - 20, y + h / 2 - 20, 40, 40).Name = "Circle01"
    'Formatting the circle:
        With ThisWorkbook.Sheets("Sheet1").Shapes("Circle01")
            .LINE.Visible = msoFalse
            .Fill.ForeColor.RGB = RGB(255, 255, 255)
        End With
End Sub

И это работает очень хорошо:

Pie chart with a hole

Было весело "решить" этот вопрос ...

...