Название серии диаграмм Excel-VBA не отображается на оси X - PullRequest
1 голос
/ 18 апреля 2019

Я создавал таблицы Excel с использованием VBA для макроса, я выполнил все требования, которые мне были нужны, кроме одного, которое дало мне самое трудное время ...

Моя проблема в том, что когда я делаюдиаграммы, которые я хочу добавить по оси X, обозначают названия серий (столбцы), чтобы их было легче читать, благодаря чему я не смог воспроизвести макрос, я могу установить названия серий и получить их в условных обозначенияхно я не могу заставить его быть на оси

Хорошо, поэтому я попытался установить названия серий, такие как:

ActiveChart.SeriesCollection(k).Name = Range("O180").Value & " " & Range("F86").Value & vbNewLine & "Óptimo: 10-12"

Я также попытался настроить и XValues, но он принимает только массивы, хотя я создал массив с одной записью, но он не сделал то, что я хотел.

Я также делаю форматирование до и после добавления всех серий. Попытка:

ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)

послеadd

Так вот, как я добавляю серии, я добавляю их все то же самое, после этого начинается еще одна If Application.IsNA, чтобы добавить еще одну серию ....

If (Not Application.IsNA(Range("P163").Value)) Then
    If (Not Len(Range("P163")) <= 0) Then
        z = z + 1
        If (ActiveChart.SeriesCollection.Count < z) Then

            ActiveChart.SeriesCollection.NewSeries

        End If
        ActiveChart.SeriesCollection(z).Values = Range("W163").Value
        ActiveChart.SeriesCollection(z).Name = Range("O163").Value & " " & Range("F49").Value & vbNewLine & "Óptimo: 6,5-7,0 (Acidez Activa)"
        ActiveChart.SeriesCollection(z).Format.Fill.OneColorGradient msoGradientHorizontal, 1, 1
        ActiveChart.SeriesCollection(z).Format.Fill.GradientStops(1).Position = 0.25
        ActiveChart.SeriesCollection(z).Format.Fill.GradientStops(2).Position = 1
        'ActiveChart.SeriesCollection(z).Points(1).AxisGroup = z COMENTED LINE
        ActiveChart.SeriesCollection(z).Points(1).ApplyDataLabels
        ActiveChart.SeriesCollection(z) _
        .DataLabels.ShowSeriesName = True
        lastInput(1) = Range("O163").Value 'Name
        lastInput(2) = Range("F49").Value 'Unformated Value for Legend
        lastInput(3) = Range("W163").Value 'Formated value for chart
        lastInput(4) = "Óptimo: 6,5-7,0 (Acidez Activa)" 'Complementary Optimal Legend Entry
    End If
End If

Я хотел имяна XAxis ниже бар, поэтому у каждого бара есть свое имя

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

enter image description here

1 Ответ

0 голосов
/ 19 апреля 2019

Мелкая деталь.Я думаю, что вы можете получить метки под своей осью X (надеюсь?), Выполнив следующие действия:

  • Щелкните правой кнопкой мыши свой график
  • Нажмите Select Data
  • Нажмите Change Row/Column
  • Нажмите OK

Но теперь у вас больше не четыре серии (каждая с одним значением), а одна серия из четырех значений.Это может иметь последствия для вашего форматирования, поскольку все столбцы теперь могут быть одного цвета (поскольку цвета по умолчанию назначаются для каждой серии, а не для значения в серии), а легенда ваших диаграмм (если она есть) может отображать только однувведите сейчас.


Когда вы создаете / используете существующие серии в своем коде, вы присваиваете: Values, Name - но вы никогда не назначаете x-значения (которые в контексте панелидиаграмма отображается как имена категорий под вашей осью X).

Excel создает для вас метки значений X (так как вы не назначали их), которые по умолчанию представляют собой список чисел (1, 2, 3, ...) соответствует длине вашей серии.Поскольку все ряды вашей диаграммы имеют только 1 значение, под вашей осью X вы видите одну метку 1.

Мне кажется, что такой подход проще хранить в таком виде на некотором рабочем листе (Я просто составил некоторые данные):

Mock data

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

Option Explicit

Private Sub PlotChart()
    Dim someSheet As Worksheet
    Set someSheet = ThisWorkbook.Worksheets("Sheet1") ' Name of sheet containing data in my case.

    Dim someChart As Chart
    Set someChart = someSheet.ChartObjects(1).Chart

    Dim someSeries As Series
    Set someSeries = someChart.SeriesCollection.NewSeries

    With someSeries
        .Values = someSheet.Range("B3:B6")
        .XValues = someSheet.Range("A3:A6")
    End With

    someChart.ChartTitle.Text = "Balanco Acido-Base"
End Sub

Что должнодать вам что-то вроде этого:

Output chart

Вы можете (через VBA) изменить форматирование (заливка, цвета и т. д.) каждого Point вваш Series - если вам нужно, чтобы столбцы были разных цветов.

Я думаю, что если вы хотите продолжить свой текущий подход (построения ряда с 1 значением для каждого столбца), товы не сможете включить названия категорий под осью X (даже если вы назначите правильный Series.XValues для каждой серии) - и вместо этого вам следует построить одну серию, состоящую из всех значений.

Это мое мнение, но, возможно, кто-то скажет вам по-другому.

...