Excel-VBA图表系列名称未显示在X轴上

时间:2019-04-18 10:10:29

标签: excel vba charts axis series

我一直在宏上使用VBA制作excel图表,我已经完成了我需要的所有要求,但是这给了我最难的时间...

我的问题是,当我制作图表时,我想在X轴上添加系列的名称(条形图),这样更易​​于阅读,从而使我无法使用宏进行复制,我能够设置系列名称并将其显示在图例上,但我无法将其显示在轴上

好,所以我尝试将系列名称设置为:

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

我也尝试设置和XValues,但是它只接受Arrays,虽然我已经创建了一个条目Array,但是没有达到我想要的效果。

在添加所有系列前后,我还会进行一些格式化 尝试过:

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

添加后

这就是我添加系列的方式,我将它们全部添加在一起,然后开始另一个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 :(得分:0)

小细节。我认为您可以通过执行以下操作来在x轴下方获得标签(希望如此):

  • 右键单击图表
  • 点击Select Data
  • 点击Change Row/Column
  • 点击OK

但是现在您不再具有四个系列(每个都有一个值),而是一个由四个值组成的单个系列。这可能会对您的格式产生影响,因为所有条形现在都可能是相同的颜色(因为默认颜色是按系列分配的,而不是按序列中的每个值分配的)-并且图表的图例(如果有)可能仅显示一种现在进入。


在代码中创建/使用现有系列时,您要分配:ValuesName-但您永远不会分配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),而应该绘制一个由所有值组成的系列。

这是我的看法,但也许有人可以告诉您不同的话。