2014-10-01 54 views
0

我創建一些vba代碼來創建圖表。我有以下代碼:使用兩個範圍創建圖表,兩個相對單元格參考

ActiveChart.SetSourceData Source:=Range((ActiveCell.Offset(-4, 0), ActiveCell.Offset(-7, 0)), (ActiveCell.Offset(-4, 2), ActiveCell.Offset(-7, 2))) 

我有一個3列,8行區域的單元格。我將選擇單元格A1,然後運行vba代碼。我想要vba代碼選擇單元格A4:A8 C4:C8(不是B4:B8),然後從中創建一個圖表。

這需要相對的原因是因爲我會多次運行vba代碼,因此我將移動多次運行vba代碼的始發單元。

回答

0

您可以對您編寫的代碼進行一些更改。

首先,ActiveChart變量將是無效的,如果您選擇單元格A1,你將有一個細胞,選擇的不是圖表。這可以通過選擇代碼中的圖表來解決。

其次,ActiveCell變量將隨着單元更改而變化。您將需要緩存該值或更新您的偏移量以匹配範圍中前一個單元格的偏移量。我會推薦以前的選項。

最後,看起來偏移量從A1的起點偏離1。

我已經做了一些修改,下面顯示的是sub。請注意,此代碼中的圖表名稱爲MyChart,但可以輕鬆更改爲您在工作表中指定的任何內容。

Sub UpdateChart() 
    Dim cell As Range 
    Set cell = ActiveCell 

    ActiveSheet.ChartObjects("MyChart").Activate 
    ActiveChart.SetSourceData Source:=Range(Range(cell.Offset(3, 0), cell.Offset(6, 0)), Range(cell.Offset(3, 2), cell.Offset(6, 2))) 
End Sub 
0

這是我的版本:

Sub ject() 
    Dim ws As Worksheet, ac As Range, ch As Chart 
    Set ws = ActiveSheet: Set ac = ActiveCell 
    With ws 
     On Error Resume Next 
     .ChartObjects("newchart").Delete 
     On Error GoTo 0 
     .Range(ac.Offset(3, 0).Resize(4).Address & "," & _ 
      ac.Offset(3, 2).Resize(4).Address).Select 
     .Shapes.AddChart(xlColumnStacked, ac.Offset(0, 4).Left, _ 
      ac.Offset(0, 4).Top, 300, 250).Name = "newchart" 
    End With 
End Sub 

這從當前選定的紙張上的當前選定單元格創建一個ColumnStacked條形圖
圖表放置在活動單元格的第5個單元格中。 HTH。

相關問題