我一直在宏上使用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栏下命名,所以每个栏都有其名称
我希望这张图片是可以理解的,请不要介意图片中图表的所有问题,只关注我遇到的问题...
答案 0 :(得分:0)
小细节。我认为您可以通过执行以下操作来在x轴下方获得标签(希望如此):
Select Data
Change Row/Column
OK
但是现在您不再具有四个系列(每个都有一个值),而是一个由四个值组成的单个系列。这可能会对您的格式产生影响,因为所有条形现在都可能是相同的颜色(因为默认颜色是按系列分配的,而不是按序列中的每个值分配的)-并且图表的图例(如果有)可能仅显示一种现在进入。
在代码中创建/使用现有系列时,您要分配:Values
,Name
-但您永远不会分配x值(在条形图的上下文中显示为类别) x轴下方的名称)。
Excel正在为您创建x值标签(因为您未分配任何标签),默认情况下,这些标签是与系列长度匹配的数字(1, 2, 3, ...
)列表。由于图表的所有系列都只有1个值,因此您会在x轴下方看到一个1
标签。
一种对我来说似乎更容易的方法是将您的数据存储在某些工作表中(我刚刚组成了一些数据):
然后您可以使用如下代码:
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
应该给你这样的东西:
您可以(通过VBA)更改Point
中每个Series
的格式(填充,颜色等)–如果您需要将条形设置为不同的颜色。
我认为,如果您想继续使用当前的方法(为每个条形图绘制一个1值长的序列),则无法在x轴下添加类别名称(即使您为每个系列分配正确的Series.XValues
),而应该绘制一个由所有值组成的系列。
这是我的看法,但也许有人可以告诉您不同的话。