2014-07-04 58 views
2

我創建了一個導致一組兩列和0到x行的宏(x =原始數據中的行數)。我正在用下一行代碼繪製圖表。忽略圖表中的空單元格VBA

Set MyChart = Sheet3.Shapes.AddChart(xlColumnClustered).Chart  
MyChart.SetSourceData Source:=Sheet2.Range("$A$1:$A$10,$b$1:$b$10") 

這將只繪製前10位數據。問題是有些情況下我的行少於10行。那麼,有沒有辦法讓VBA忽略最後一個數據單元下的空單元對?

更新1: 我需要使用柱狀圖,我刪除表中的任何過去的圖表並添加一個新的圖表 謝謝。

回答

1

這不是一個VBA編程問題本身。您需要使用圖表的XY散點圖類型,其中您在電子表格中指定了X軸和Y軸。

然後,您可以設置圖表設置爲「忽略隱藏和空白單元格」

然後你相同的代碼甚至可以使用額外的細胞更新圖表任何範圍。

如果你的公式給出有用的值僅在第10號和「空白」之後,請確保您使用的功能

=IFERROR(YourCell x 1, NA()) 

雖然NA()的外觀與#NA替代「空白」醜陋的電子表格上,這是極好的圖表如圖表所示,簡單地忽略這一點,那麼你可以設置圖表繪製

  1. 空白或
  2. 內插值

在它的位置(根據您的設置)

對於任何其他類型的圖表,除非你跟蹤與WorkSheet Change事件在電子表格上的變化這是不可能做到這一點。

和代碼重新大小圖表類別和值數據應該從工作表中的這個事件處理程序(而不是模塊)

Private Sub Worksheet_Change(ByVal Target As Range) 
    ' Code to handle the change, stuffing the chart category and value data goes here 
End Sub 

在最壞的情況下,你不能改變被稱爲範圍大小,您可以在電子表格中將範圍聲明爲動態並通過名稱引用它。

在此MSFT知識庫函數中,您將獲得關於動態定義範圍的信息。 http://support.microsoft.com/kb/830287

+0

我忘了說,我需要使用柱形圖和我刪除的表的任何過去的圖表和增加比賽的是一個新的遺憾。 – Wabonano

+0

謝謝。所以如果我不能使用柱形圖,我想我會通過獲得正確的範圍直到空白單元格來處理它。 – Wabonano

+1

是的,在我所知的任何其他圖表形式中,您需要明確更改範圍大小。 – hnk

0
Sub test() 
     Dim MyChart As Chart 
     Dim Ws As Worksheet 

     Set Ws = Sheet3 
     With Ws 
      If .ChartObjects.Count > 0 Then 
       .ChartObjects.Delete 
      End If 

      Set MyChart = .Shapes.AddChart(xlColumnClustered).Chart 
      MyChart.SetSourceData Source:=Sheet2.Range("a1").CurrentRegion 
     End With 
    End Sub