【问题标题】:VBA User Defined Chart Function Creating Multiple SeriesVBA用户定义图表函数创建多个系列
【发布时间】:2017-09-15 18:30:39
【问题描述】:

我有一个 VBA 电子表格,允许用户添加另一个电子表格的内容、对其进行格式化、计算总计和添加饼图。它大部分工作正常,除了当我们想要一个饼图中的所有数据点时,有一个月份选项卡为每个数据点创建一个系列。

这是创建饼图的函数。

Sub AddChart(CurrentWorkSheet As Worksheet)
Dim FirstRow As Integer
Dim LastRow As Integer
Dim FirstColumn As String
Dim LastColumn As String
Dim DataRange As Range
Dim i As Integer

FirstRow = RowCount(CurrentWorkSheet) + 2
LastRow = FirstRow + 4
Set DataRange = CurrentWorkSheet.Range("I" & FirstRow & ":I" & LastRow)

Dim MyChart As Chart
Set MyChart = CurrentWorkSheet.Shapes.AddChart(xlPie).Chart

MyChart.SetSourceData Source:=DataRange
MyChart.SeriesCollection(1).HasDataLabels = True

For i = 1 To MyChart.SeriesCollection(1).Points.Count
    If i = 1 Then
        MyChart.SeriesCollection(1).Points(i).Interior.Color = RGB(0, 176, 80)
    ElseIf i = 2 Then
        MyChart.SeriesCollection(1).Points(i).Interior.Color = RGB(255, 0, 0)
    ElseIf i = 3 Then
        MyChart.SeriesCollection(1).Points(i).Interior.Color = RGB(112, 48, 160)
    ElseIf i = 4 Then
        MyChart.SeriesCollection(1).Points(i).Interior.Color = RGB(0, 0, 0)
        MyChart.SeriesCollection(1).Points(i).DataLabel.Font.Color = RGB(255, 255, 255)
    ElseIf i = 5 Then
        MyChart.SeriesCollection(1).Points(i).Interior.Color = RGB(0, 112, 192)
    Else
    End If
Next

MyChart.SeriesCollection(1).XValues = CurrentWorkSheet.Range("H" & CStr(FirstRow) & ":H" & CStr(LastRow))
End Sub

在此工作簿中有一个YTD 工作表和每个月的工作表。到了四月,馅饼只有一种颜色。其他月份都很好。

数据集如下:

ATTACHMENT            962.31
DAMAGE              3,279.94
MODIFICATIONS         451.00
REPAIRS             5,239.78
TIRES               1,979.04

数据范围是第 51-55 行。

=SERIES(,'Apr 2014'!$H$51:$H$55,'Apr 2014'!$I$51,1)

当我在 Excel 中查看系列时,列出了 5 个,第一个是 ATTACHMENT,最后 4 个是 1。每个月都使用相同的功能以及YTD 选项卡,除了四月,它们都可以。

任何想法可能导致它?

【问题讨论】:

  • 我猜布局有些不同,但您可能只需要添加 PlotBy 参数MyChart.SetSourceData Source:=DataRange, PlotBy:=xlColumns 或使用xlRows(如果合适)。

标签: vba excel charts


【解决方案1】:

我想我明白了。我更改了以下内容

Set DataRange = CurrentWorkSheet.Range("I" & FirstRow & ":I" & LastRow)

Set DataRange = CurrentWorkSheet.Range("I" & CStr(FirstRow) & ":I" & CStr(LastRow))

现在似乎可以工作了。不确定为什么它在其他选项卡上运行良好....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多