Excel 2016 VBA:将图表的源数据设置为命名表

标题是不言自明的。

我有一个命名表Table_Unit_2_Data ,我想将它设置为将使用VBA创build的图表的源数据。

在录制macros时,我select了整个表格,并插入了一个图表。 这是我得到的代码(Build是表单的名称):

 Sub Test() Range("Table_Unit_2_Data[#All]").Select ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers).Select ActiveChart.SetSourceData Source:= Range("Build!$Y$1:$AD$2") End Sub 

那么,正如你所看到的,一个特定的$ A $ 1范围被传入SetSoureData。 这将不起作用,因为Table_Unit_2_Data的范围会改变。

我试图这样做:

 With Sheet2.Shapes.AddChart2(240, xlXYScatterSmoothNoMarkers) .Chart.SetSourceData (Sheet2.Range("Table_Unit_2_Data[#All]")) End With 

但是,然后我得到错误“对象需要”。

我似乎无法用search查询的方式来find这个在互联网上的具体问题的相关答案,所以我很抱歉问什么可能是一个多余的问题。 如果有人能够帮助我解决这个问题,我将非常感激,如果有人有一个好的文章或来源网上有关VBA内的图表创作的细微差别,也将是非常有益的信息。

谢谢。

除了Domenic所说的(这是正确的+会导致“Object Required”错误)之外,您的代码并不清楚“Sheet2”是什么,除了它是某个表单的代号 。 从logging的macros中,我可以推断出实际的表在一个名为“Build”的表上,所以另一种可能性是Sheet2实际上不是表格的代号(“Build”)。 再一次,我不能从提供的代码中知道。

虽然我喜欢使用表单代号,但我强烈build议不要使用它们,如果你不打算描述的名称。

FWIW,还有另一种引用表格范围的方法,它更加灵活一些,特别是如果你要引用代码中其他地方的表格的话。 只需创build一个ListObjectvariables:

 Dim UnitTable2 As ListObject Set UnitTable2 = Sheets("Build").ListObjects("Table_Unit_2_Data") 

而且你可以很容易地引用表格的任何部分:

 Dim rng As Range 'Reference the whole table, including headers: Set rng = UnitTable2.Range 'Reference just the table data (no headers): Set rng = UnitTable2.DataBodyRange 'Reference just the data in a single column: Set rng = UnitTable2.ListColumns("Col1").DataBodyRange 'Reference the headers only Set rng = UnitTable2.HeaderRowRange