Ширина ввода легенды диаграммы - PullRequest
0 голосов
/ 13 марта 2020

Как получить правильную ширину каждой записи легенды в диаграмме? Я использовал свойство ширины LegendEntry, но это не дает правильное значение.

Например, используя следующую легенду:

enter image description here

, если я проверяю ширину каждой записи легенды, используя LegendEntry.Width, я получаю то же самое ширина для каждой записи

A = 67, слово = 67, более длинное предложение = 67,

Что, очевидно, неверно, вероятно, наибольшая ширина назначена всем записям. Так как же узнать фактическую ширину каждой записи?

1 Ответ

0 голосов
/ 13 марта 2020

Я знаю, что размер легенды диаграммы автоматически изменяется в соответствии с количеством букв.

Так что это аномалия, но, похоже, необходимо отрегулировать количество символов как пустых. Это не точное совпадение , но пробел * 2 кажется похожим .

Sub setCharts(Target As Range, Cht As Chart)
    Dim Srs As Series
    Dim vColor, vName
    Dim i As Integer, Ln As Integer, k As Integer

    vColor = Array(RGB(246, 246, 246), RGB(255, 224, 140), RGB(47, 157, 39), RGB(0, 0, 0))
    vName = Array("A", "Word", "Longer sentence", "stack")

    Ln = Len(vName(2)) '<~~~ "Longer sentence" 's length  --> Collection name

    '******  The Loop statement below makes the series names the same length ******

'    For i = 0 To UBound(vName)
'        k = Ln - Len(vName(i))
'        vName(i) = vName(i) & Space(k * 2)
'        M = Len(vName(i))
'    Next i

    With Cht
        .ChartType = xlColumnStacked

        .HasLegend = True
        .Legend.Position = xlLegendPositionBottom

        .HasTitle = True
        .ChartTitle.Text = Target.Value
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "OCF Percentiles"
        .Axes(xlValue).MajorUnit = 50
        For Each Srs In .SeriesCollection
            Srs.Delete
        Next Srs

        For i = 0 To 2
            Set Srs = .SeriesCollection.NewSeries
            With Srs
                .Name = vName(i)    '<~~ Collection name
                .Values = Target.Offset(0, 1).Resize(3).Offset(0, i)
                .XValues = Array("A", "D", "I")
                .Format.Fill.ForeColor.RGB = vColor(i)
                If i = 0 Then
                    .Format.Fill.Transparency = 0.5 '<~~~~~ Transparency was adjusted
                End If
            End With
        Next i
        Set Srs = .SeriesCollection.NewSeries
        With Srs
            .Name = vName(3)    '<~~ Collection name
            .ChartType = xlXYScatter
            .Values = Target.Offset(0, 4).Resize(1, 3)
            .MarkerStyle = xlMarkerStyleSquare
            .MarkerBackgroundColor = vColor(3) 'vbBlack
        End With
    End With
End Sub

До

enter image description here

После

enter image description here

...