2017-02-22 29 views
0

因此,我有一個電子表格,數據跨越了A2到AF17,我隱藏了大部分列,現在只有列:I,AB,AD,AF顯示,其中列I是我想要的範圍作爲軸標籤範圍,列AF作爲值範圍。VBA圖表:直到最後一個非空行作爲源數據的範圍

我編碼以下內容來創建動態使用範圍,直到最後一個非空行作爲值的曲線圖:

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現在是最左邊的可見列。也就是說,實際上源數據範圍是A2:AF17,而軸標籤範圍實際上是A2:AD17。而且,當我取消隱藏列時,軸標籤自然會變得混亂。

儘管當前的圖表服務於我的目的,但它絕對不是理想的。那麼如何將源數據精確地設置爲列I作爲軸標籤範圍和列AF作爲值範圍,同時繼續使用最後一個非空行方法?

我還是比較新的VBA,任何幫助表示讚賞。

回答

0

我更喜歡使用ChartObject而不是Chart,我發現它更容易嵌套在所有屬性下面,而不是使用Chart.Parent。下面

的代碼將創建圖表,後來增加了一個Series與定義Range(完全合格Range)爲Values和列「I」作爲RangeXValues(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 
相關問題