我正在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 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>
答案 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.Add
或AddChart
上使用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
的图表上执行进一步的操作。