使用Array创建VBA图表

时间:2016-09-13 02:15:05

标签: excel vba excel-vba

我正在尝试使用vb6创建一个excel图表。而不是提供excel范围我试图喂养阵列。我得到一个错误。 这是我正在处理的代码

Private Sub CreateChart(Optional ByVal ChartTitle As String _
                , Optional ByVal xAxis As Excel.Range _
                , Optional ByVal yAxis As Excel.Range _
                , Optional ByVal ColumnName As String _
                , Optional ByVal LegendPosition As XlLegendPosition = xlLegendPositionRight _
                , Optional ByVal rowIndex As Long = 2 _
                , Optional ByRef ChartType As String = xlLineMarkers _
                , Optional ByVal PlotAreaColorIndex As Long = 2 _
                , Optional ByVal isSetLegend As Boolean = False _
                , Optional ByVal isSetLegendStyle As Boolean = False _
                , Optional ByVal LegendStyleValue As Long = 1)

Const constChartLeft = 64
Const constChartHeight = 300
Const constChartWidth = 700

Dim xlChart As Excel.ChartObject
Dim seriesCount As Long
Dim ColorIndex As Long

Dim j As Long


With mWorksheet
    .Rows(rowIndex).RowHeight = constChartHeight

    Set xlChart = .ChartObjects.Add(.Rows(rowIndex).Left, .Rows(2).Top, constChartWidth, constChartHeight)
End With

With xlChart.chart
    .ChartType = ChartType
    .SetSourceData Source:=marrayPOClient, PlotBy:=marrayPOSKU
    .SeriesCollection(1).XValues = marrayPOClient
    .HasTitle = True

    .Legend.Position = LegendPosition
    .Legend.Font.Size = 7.3
    .Legend.Font.Bold = True
    .Legend.Border.LineStyle = xlNone

    .ChartTitle.Characters.Text = ChartTitle
    .ChartTitle.Font.Bold = True

    .Axes(xlValue).TickLabels.Font.Size = 8 ' yAxis Labels
    .Axes(xlCategory).TickLabels.Font.Size = 8 ' xAxis Labels

    .PlotArea.Interior.ColorIndex = PlotAreaColorIndex
    .PlotArea.Interior.ColorIndex = 15
    .PlotArea.Interior.PatternColorIndex = 1
    .PlotArea.Interior.Pattern = xlSolid
End With
End Sub

是否可以将数组用于图表。如果可能的话,我的错误是什么。

2 个答案:

答案 0 :(得分:1)

正如Mat的Mug所说,SetSourceData需要Range,但您可以使用其他方法获得结果

替换

.SetSourceData Source:=marrayPOClient, PlotBy:=marrayPOSKU

.SeriesCollection.NewSeries
.SeriesCollection(1).Values = marrayPOClient

这将创建一个没有源的新系列,然后将该数组指定为系列值

答案 1 :(得分:0)

Chart.SetSourceDataRange参数需要Source个对象,XlRowCol参数需要PlotBy枚举值。

假设 marrayPOClientmarrayPOSKU都是数组,因为他们的名字暗示(你没有显示他们被宣布的位置)以及如何分配它们,因此我们无法知道它们的类型或价值),但您需要为第一个参数提供Range,还可以选择xlColumnsxlRows对于第二个参数。