【问题标题】:VBA Chart: Ranges until last non-empty row as source dataVBA图表:范围直到最后一个非空行作为源数据
【发布时间】:2017-02-23 02:26:34
【问题描述】:

所以我有一个数据跨越 A2 到 AF17 的电子表格,我隐藏了大部分列,现在只显示列:I、AB、AD、AF,其中列 I 是我想要作为轴标签范围的范围, AF 列作为取值范围。

我编写了以下代码来创建一个动态使用范围直到最后一个非空行作为值的图表:

Private Sub CommandButton2_Click()

Dim MyEmbeddedChart As Chart

Set MyEmbeddedChart = Sheets("Analysis").Shapes.AddChart(Width:=634, Height:=250).Chart

With MyEmbeddedChart
    .ChartType = xlBarClustered
    .ChartStyle = 339
    .SetSourceData Source:=Sheets("Analysis").Range("AF2", Cells(Rows.Count,  1).End(xlUp))
    .Legend.Delete
    .Axes(xlValue).Delete
    .Axes(xlValue).MajorGridlines.Format.Line.Visible = msoFalse
    .ApplyDataLabels
End With

End Sub

现在,即使生成的图表自动将 I 列显示为轴标签范围,这只是因为 I 列是目前最左边的可见列。也就是说,实际上源数据范围是 A2:AF17,轴标签范围实际上是 A2:AD17。一旦我取消隐藏列,轴标签自然就搞砸了。

尽管当前的图表符合我的目的,但它绝对不是理想的。那么如何将源数据精确地设置为 I 列作为轴标签范围,AF 列作为值范围,同时继续使用最后一个非空行方法?

我对 VBA 还是比较陌生,感谢任何帮助。

【问题讨论】:

    标签: vba excel charts


    【解决方案1】:

    我更喜欢使用ChartObject 而不是Chart,我发现嵌套所有属性比使用Chart.Parent 更容易。

    下面的代码将创建您的图表,然后添加一个Series,其中定义了Range(完全限定Range)用于Values,并将列“I”作为Range 用于XValues (X 轴)。

    代码

    Option Explicit
    
    Private Sub CommandButton2_Click()
    
    Dim MyEmbeddedChart As ChartObject
    Dim Sht As Worksheet
    
    Set Sht = Worksheets("Analysis")
    
    Set MyEmbeddedChart = Sht.ChartObjects.Add(100, 100, 634, 250)
    
    With MyEmbeddedChart
        With .Chart
            .ChartType = xlBarClustered
            .ChartStyle = 339
            .Legend.Delete
            .Axes(xlValue).Delete
            .Axes(xlValue).MajorGridlines.Format.Line.Visible = msoFalse
            .ApplyDataLabels
        End With
    
        ' this is for one series , you need to do this for every series collection
        With .Chart.SeriesCollection.NewSeries
            .Name = "ser" & MyEmbeddedChart.Chart.SeriesCollection.Count
            .Values = Sht.Range("AF2", Sht.Cells(Sht.Rows.Count, "AF").End(xlUp))
            .XValues = Sht.Range("I2", Sht.Cells(Sht.Rows.Count, "I").End(xlUp))
        End With
    End With
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-05
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多