2014-07-04 31 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