在Excel VBA中,Chart对象用于表示和操作工作簿中的图表。它提供了许多属性和方法,使你能够创建、修改和操作图表对象。
1、Chart 对象的常用属性
Chart对象具有许多属性,可以用于设置图表的各个方面,包括类型、标题、轴标签、数据系列、图例等。以下是一些Chart对象的常用属性及其详细说明:
- ChartType:获取或设置图表的类型。可以使用ChartType常量指定图表类型,例如xlColumnClustered(柱状图)、xlLine(折线图)、xlPie(饼图)等。
- ChartTitle:获取或设置图表的标题。可以使用ChartTitle对象来设置标题的文本、字体、大小、位置等属性。
- ChartArea:返回ChartArea对象,表示图表区域。可以使用ChartArea对象的属性设置图表区域的背景颜色、边框、填充等。
- PlotArea:返回PlotArea对象,表示图表绘图区域。可以使用PlotArea对象的属性设置绘图区域的背景颜色、边框、填充等。
- Legend:返回Legend对象,表示图例。可以使用Legend对象的属性设置图例的位置、显示方式、文本样式等。
- Axes:返回Axes对象,表示图表的轴。可以使用Axes对象的属性和方法设置轴的标签、刻度线、网格线等。
- SeriesCollection:返回SeriesCollection对象,表示图表中的数据系列集合。可以使用SeriesCollection对象的属性和方法添加、删除、修改和格式化数据系列。
- HasTitle:获取或设置一个值,指示图表是否具有标题。
- HasLegend:获取或设置一个值,指示图表是否具有图例。
- HasAxis:获取或设置一个值,指示图表是否具有指定的轴(如X轴、Y轴)。
- HasDataTable:获取或设置一个值,指示图表是否具有数据表。
- ChartStyle:获取或设置图表的样式。可以使用ChartStyle常量指定图表样式,例如ChartStyleLight1、ChartStyleDark2等。
- GapWidth:获取或设置柱状图中相邻柱之间的间距宽度。
- VaryColors:获取或设置一个值,指示是否在图表中为每个数据系列使用不同的颜色。
以上仅列举了一些常用的Chart对象属性,你可以根据具体需求进一步探索和使用其他属性来自定义和控制图表的外观和行为。通过设置这些属性,你可以创建各种类型的图表,并灵活地调整其样式和布局,以满足数据可视化的需求。
2、Chart 对象的常用方法
在Excel VBA中,Chart对象用于表示和操作工作簿中的图表。除了属性之外,Chart对象还提供了许多方法,可以用于创建、修改和操作图表对象。以下是一些常用的Chart对象方法的详细说明:
I、Clear:清除图表的内容和格式。
Chart.Clear
II、Refresh:刷新图表的数据和显示。可以使用该方法在更改图表数据后更新图表的内容。
Chart.Refresh
III、Copy:将图表复制到剪贴板。
Chart.Copy
IV、Delete:删除图表。
Chart.Delete
V、Paste:将图表从剪贴板粘贴到指定位置。
Chart.Paste Destination:=Range("Sheet1!A1")
VI、Activate:激活图表,使其成为活动图表。
Chart.Activate
VII、、SetElement:设置图表的特定元素的可见性。
Chart.SetElement msoElementLegendNone
通过调用上述代码,图表对象的图例将被设置为不可见,从而隐藏图例。请注意,该代码必须在已经创建并具有可见图例的图表上调用才有效。如果图表中没有图例元素,或者已经隐藏了图例,则调用该代码不会产生任何影响。
VIII、SetSourceData:设置图表的数据源范围。可以使用该方法将指定的数据范围分配给图表对象的数据系列。
Chart.SetSourceData Source:=Range("Sheet1!$A$1:$B$10")
XI、ChartWizard:打开图表向导,用于创建和设置图表。该方法提供了交互式创建和修改图表的功能。
Chart.ChartWizard Source:=Range("Sheet1!$A$1:$B$10"), Gallery:=xlLine, Title:="Sales Chart"
X、Export:将图表导出为图片或其他文件格式。可以使用该方法将图表保存为图像文件或将其复制到剪贴板。
Chart.Export Filename:="C:\Charts\chart.png", Filtername:="PNG"
XI、CopyPicture:将图表复制为图片,可以粘贴到其他位置。该方法将图表复制到剪贴板,以便在其他应用程序中使用。
Chart.CopyPicture Appearance:=xlScreen, Format:=xlPicture
XII、ApplyChartTemplate:应用图表模板。可以使用该方法将预定义的图表模板应用于当前图表。
Chart.ApplyChartTemplate Filename:="C:\Templates\template.crtx"
XIII、ApplyDataLabels:在数据系列上显示数据标签。
Chart.ApplyDataLabels Type:=xlDataLabelsShowValue
XIV、SeriesCollection方法:SeriesCollection对象表示图表中的数据系列集合。可以使用该方法访问和操作图表的数据系列。
Dim series As Series
Set series = Chart.SeriesCollection(1)
' 操作数据系列
series.Values = Range("Sheet1!$B$2:$B$10")
series.XValues = Range("Sheet1!$A$2:$A$10")
XV、ApplyCustomType:将图表类型更改为自定义类型。
Chart.ApplyCustomType ChartType:=xlChartTypeCustom, TypeName:="MyCustomChart"
XVI、CopyPicture:将图表复制为图片。
Chart.CopyPicture Appearance:=xlScreen, Format:=xlPicture
XVII、ExportAsFixedFormat:将图表另存为PDF或其他格式。
Chart.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Charts\chart.pdf"
XVIII、GetChartElement:获取鼠标所在位置的图表元素。
Dim elementID As Long
Dim arg1 As Long, arg2 As Long
Chart.GetChartElement x, y, elementID, arg1, arg2
XIX、SetBackgroundPicture:设置图表的背景图片。
Chart.SetBackgroundPicture Filename:="C:\Images\background.jpg"
XX、SetDefaultChart:将图表设置为默认图表类型。
Chart.SetDefaultChart
XXI、HasAxis方法:检查图表是否具有指定类型的轴。
Dim hasAxis As Boolean
hasAxis = Chart.HasAxis(xlCategory)
以上是一些常用的Chart对象方法,你可以根据需要进一步探索和使用其他方法来操作和自定义图表。这些方法提供了广泛的功能,可以让你以编程方式创建、修改和管理图表对象,以满足特定的数据分析和可视化需求。
3、Chart 对象运用
I、创建一个柱状图并设置其属性
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
' 添加图表并设置位置
Dim chart As ChartObject
Set chart = ws.ChartObjects.Add(Left:=100, Top:=100, Width:=400, Height:=300)
' 设置图表数据源范围
Dim dataRange As Range
Set dataRange = ws.Range("A1:B5")
chart.Chart.SetSourceData dataRange
' 设置图表类型和标题
chart.Chart.ChartType = xlColumnClustered
chart.Chart.ChartTitle.Text = "Sales Data"
' 设置图表区域的背景颜色和边框
chart.Chart.ChartArea.Format.Fill.ForeColor.RGB = RGB(255, 255, 255)
chart.Chart.ChartArea.Format.Line.Visible = msoTrue
chart.Chart.ChartArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
' 设置图例的位置和显示方式
chart.Chart.Legend.Position = xlLegendPositionBottom
chart.Chart.Legend.IncludeInLayout = False
II、绘制折线图
Dim chart As Chart
Set chart = Worksheets("Sheet1").ChartObjects.Add().Chart
chart.ChartType = xlLine
chart.SetSourceData Source:=Range("Sheet1!$A$1:$B$10")
III、绘制饼图
Dim chart As Chart
Set chart = Worksheets("Sheet1").ChartObjects.Add().Chart
chart.ChartType = xlPie
chart.SetSourceData Source:=Range("Sheet1!$A$1:$B$10")
IV、绘制散点图
Dim chart As Chart
Set chart = Worksheets("Sheet1").ChartObjects.Add().Chart
chart.ChartType = xlXYScatter
chart.SetSourceData Source:=Range("Sheet1!$A$1:$B$10")
V、绘制雷达图
Dim chart As Chart
Set chart = Worksheets("Sheet1").ChartObjects.Add().Chart
chart.ChartType = xlRadar
chart.SetSourceData Source:=Range("Sheet1!$A$1:$B$10")
VI、绘制面积图
Dim chart As Chart
Set chart = Worksheets("Sheet1").ChartObjects.Add().Chart
chart.ChartType = xlArea
chart.SetSourceData Source:=Range("Sheet1!$A$1:$B$10")
VII、绘制雷达填充图
Dim chart As Chart
Set chart = Worksheets("Sheet1").ChartObjects.Add().Chart
chart.ChartType = xlRadarFilled
chart.SetSourceData Source:=Range("Sheet1!$A$1:$B$10")
VIII、绘制组合图表(包含多个图表类型)
Dim chart As Chart
Set chart = Worksheets("Sheet1").ChartObjects.Add().Chart
chart.ChartType = xlColumnClustered
chart.SetSourceData Source:=Range("Sheet1!$A$1:$B$10")
' 添加第二个系列
chart.SeriesCollection.NewSeries
chart.SeriesCollection(2).ChartType = xlLine
chart.SeriesCollection(2).Values = Range("Sheet1!$C$1:$C$10")
' 添加第三个系列
chart.SeriesCollection.NewSeries
chart.SeriesCollection(3).ChartType = xlBarClustered
chart.SeriesCollection(3).Values = Range("Sheet1!$D$1:$D$10")
IX、绘制正方体和圆球·
Sub DrawTransparentCubeWithSpheres()
Dim objShapes As Shapes
Set objShapes = ActiveSheet.Shapes
ActiveSheet.Shapes.SelectAll
Selection.Delete
' 绘制正方体
objShapes.AddShape(msoShapeCube, 100, 100, 100, 100).Fill.Transparency = 1
' 绘制小圆球
objShapes.AddShape(msoShapeOval, 120, 120, 20, 20).Fill.ForeColor.RGB = RGB(255, 0, 0)
objShapes.AddShape(msoShapeOval, 130, 130, 20, 20).Fill.ForeColor.RGB = RGB(0, 255, 0)
objShapes.AddShape(msoShapeOval, 140, 140, 20, 20).Fill.ForeColor.RGB = RGB(0, 0, 255)
End Sub
调用子过程DrawTransparentCubeWithSpheres(),图形效果如下:

X、正方形内绘制随机散点图
Sub DrawTransparentCubeWithPoints()
Dim objShapes As Shapes
Set objShapes = ActiveSheet.Shapes
ActiveSheet.Shapes.SelectAll
Selection.Delete
' 绘制正方体
objShapes.AddShape(msoShapeCube, 100, 100, 100, 100).Fill.Transparency = 0.8
' 绘制散点
Dim i As Integer
For i = 1 To 100
objShapes.AddShape(msoShapeOval, 100 + Rnd() * 80, 100 +
_ Rnd() * 80, 1, 1).Fill.ForeColor.RGB = RGB(255, 255, 255)
Next i
End Sub
调用子过程DrawTransparentCubeWithPoints(),图形效果如下:

4、利用录制宏学习使用Chart对象属性和方法
I、EXCEL数据和柱形图

在EXCEL中,根据成绩比例数据绘制柱状图,然后将图像做如下修整:
- 删除图例
- 修改标题
- 去掉网格横线
- 修改纵轴最大值和
完成上述修整,图像如下:

图形绘制和修改过程宏代码如下:
Range("A1:F2").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Range("Sheet5!$A$1:$F$2")
ActiveSheet.Shapes("图表 2").IncrementLeft -238.1249606299
ActiveSheet.Shapes("图表 2").IncrementTop -9.3749606299
ActiveSheet.Shapes("图表 2").ScaleWidth 0.8888886702, msoFalse, _
msoScaleFromTopLeft
ActiveSheet.Shapes("图表 2").ScaleHeight 0.8139468504, msoFalse, _
msoScaleFromTopLeft
ActiveSheet.Shapes("图表 2").ScaleHeight 1.0782083098, msoFalse, _
msoScaleFromTopLeft
ActiveChart.Legend.Select
Selection.Delete
ActiveSheet.ChartObjects("图表 2").Activate
ActiveChart.PlotArea.Select
ActiveChart.Axes(xlValue).MajorGridlines.Select
Selection.Delete
ActiveSheet.ChartObjects("图表 2").Activate
ActiveChart.Axes(xlValue).Select
ActiveChart.Axes(xlValue).MaximumScale = 0.45
ActiveChart.Axes(xlValue).MaximumScale = 0.4
ActiveChart.Axes(xlValue).MajorUnit = 0.05
ActiveChart.Axes(xlValue).MajorUnit = 0.1
ActiveChart.ChartArea.Select
宏代码往往存在代码冗余问题,对有一定VBA编程基础的读者,去重、抽象和简化宏代码不是什么难题。宏代码记录EXCEL绘图过程,是学习VBA Chart对象属性和方法的有效途径。