如何使用VBA在Excel中创建图形?

时间:2019-05-22 20:04:06

标签: excel vba

我正在Excel上做一个报告,该报告将根据在电子表格中输入的数据为用户创建图形。我对VBA还是很陌生,尽管我认为我掌握了一些基本的表达式和结构,但我肯定很难理解可用于图形编码的选项。


基本的Google搜索会产生大量指南,以下是示例:

https://peltiertech.com/Excel/ChartsHowTo/QuickChartVBA.html

https://www.thespreadsheetguru.com/blog/2015/3/1/the-vba-coding-guide-for-excel-charts-graph

...并在Stack Overflow上进行搜索并浏览Microsoft帮助页面,可以提供一定程度的洞察力。但是,似乎有几种使用VBA制作图形的方法,而且我正努力理解不同代码示例中的细微差别。


例如,我不确定应该为图表使用哪些变量。与Dim cht As ChartAs Shape相对使用As ChartObject可能会有什么后果?我想这可能会为我考虑用来创建实际图形的表达式提供信息-根据示例,该表达式似乎包括:

Set cht = ws.Shapes.AddChart2(201, xlColumnClustered)

或者:

ws.ChartObjects.Add(*Left, Top, Width, Height*)

或者:

Set chtSht = Charts.Add

...其中的每一个似乎都有很大的不同,我最终不明白这些差异的目的是什么。

我很直觉主要与图表是否嵌入有关,尽管我不确定这在多大程度上会影响代码。

因此,对于那些比我更有经验并且可能比我能够消化Google搜索结果更有效地解决这些问题的人:我应该如何使用VBA在Excel中创建图形? < / p>

1 个答案:

答案 0 :(得分:1)

有四种语法可将嵌入式图表添加到工作表中。我将最先列出它们。

最古老的方法是添加图表表,然后将图表表放置到工作表上。不要使用它,它已经过时了。

Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"

这种方式将ChartObject直接添加到工作表中。 ChartObject是包含图表的一种特殊形状。这会使用括号中的尺寸和位置(必填)来添加默认图表(除非您定义了其他默认值,否则为聚集列)。它返回一个ChartObject。

ActiveSheet.ChartObjects.Add(Left, Top, Width, Height)

Excel 2007引入了此语法,其中包括图表类型(如果省略,则为默认类型)以及位置和大小(如果省略,则图表为活动窗口中心的默认大小3 x 5英寸)。 。它返回一个Shape。

ActiveSheet.Shapes.AddChart(XlChartType, Left, Top, Width, Height)

Excel 2013引入了另一种语法,该语法除了其他参数外还包括图表样式,并且还返回形状。

ActiveSheet.Shapes.AddChart2(Style, XlChartType, Left, Top, Width, Height)

我想一直使用AddChart2,但是我仍然支持Excel 2010的用户,因此我必须使用AddChart。我有一个例程,可以查找给定图表类型的默认样式,因此可以在Excel 2013+中应用它来模仿AddChart2。可能没有理由在ChartObjects.AddAddChart上使用AddChart2;如果有效,则无需重写代码,但不要在新代码中使用它。

您应该做的是声明一个Chart类型的变量,并将其设置如下:

Dim cht As Chart

Set cht = ActiveSheet.ChartObjects.Add(100, 100, 360, 216).Chart

Set cht = ActiveSheet.Shapes.AddChart(xlXYScatterLines, 100, 100, 360, 216).Chart

Set cht = ActiveSheet.Shapes.AddChart2(240, xlXYScatterLines, 100, 100, 360, 216).Chart

现在您可以在分配给cht的图表上执行进一步的操作。