首页 > 解决方案 > 我应该如何使用 VBA 在 Excel 中创建图形?

问题描述

我正在制作一份 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 Chart使用而不是As Shapeor可能会产生什么后果As ChartObject?我想这可能会通知我考虑用来创建实际图形的表达式 - 根据示例,这似乎包括:

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

或者:

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

或者:

Set chtSht = Charts.Add

...每一个看起来都完全不同,我最终不明白这些差异的目的是什么。

我有一种预感,这主要与图表是否嵌入有关,尽管我不确定这会在多大程度上通知代码。

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

标签: excelvba

解决方案


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

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

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

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

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

Excel 2007 引入了这种语法,其中包括图表类型(如果省略,您将获得默认类型)以及位置和大小(如果省略,图表是默认大小,3 x 5 英寸,位于活动窗口的中心)。它返回一个形状。

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.AddoverAddChartAddChart2; 如果它正在工作,则无需重写代码,但不要在新代码中使用它。

您应该做的是声明一个类型的变量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


推荐阅读