VBA教程:不要控件、不要辅助列的纯VBA动态图表

哈喽,大家好,提到动态图表大家的第一反应是什么呢?可能是辅助列 公式,可能是数据透视表 切片器,可能是辅助列 控件,今天的过儿教大家用纯VBA编程做出来动态的可视化图表。
先跟过儿一睹为快,然后开讲:
是不是很神奇?伙伴们学会了这篇以后做动态图表就可以多一种方法,并且只要将本篇文章的代码拿去套用改几个参数就可以啦,一劳永逸。
来看一下完整的代码
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim mychartobject As ChartObject, ws As Worksheet, row As Long
Set ws = Sheet1
row = Target.row
If row < 11 And row > 2 Then
If ws.ChartObjects.Count = 0 Then
Set mychartobject = ws.ChartObjects.Add(80, 240, 300, 200)
Else
Set mychartobject = ws.ChartObjects(1)
End If
With mychartobject.Chart
.ChartType = xlLine
.SetSourceData Source:=Range(ws.Cells(row, 3), ws.Cells(row, 13))
.HasTitle = True
.ChartTitle.Text = ws.Cells(row, 2)
End With
End If
End Sub
代码解析:
来跟我捋一下代码的思路,我们首先确定一个目标效果:“我们希望在鼠标点击数据的时候,可以自动生成鼠标点击的那一行的数据对应的图表,这是一个“选择即产生”的事件”。 所以我们应该将代码用在VBA的表“事件”中,所以需要在我们的数据源表也就是sheet1对应的编辑模块中进行操作。进入VBA编辑器选择sheet1模块,然后选择上面的selectionchange事件,也就是鼠标只要选择发生变化就会运行代码的意思。
接下来我们需要在中间编辑过程代码。
过程代码:
第2行代码定义一个工作表对象,一个long对象,还有一个图表的对象,也就是Chartobject
关于Chartobject对象:
Chartobject对象代表工作表中的一个图表,一个工作表的任何一个图表就是一个Chartobject,所有这些图表在一起就是worksheet.Chartobjects
worksheet.Chartobjects的属性有
  1. Chartobjects.Count
  2. Chartobjects.(K)
  3. Chartobjects.(Delete)
第3行sheet1赋值到ws这个变量中,
第4行解释两个地方,第一,Target这个词上面出现过一次,在第一行事件语句中,意思就是我们用鼠标选择的单元格。那么Target.row就表示当前选择的行的行号。然后将当前行的行号赋值给到row这个变量中
第5行代码是锁定有效区域,我们希望鼠标只在选中第2到10行时才会生成图表
所以我们加了if判断
第6行到第8行代码表示,如果当前工作表中的图表是0,也就是没有图表那么
在该工作表中新增一个图表,该图表左边距离工作表最左边,最上面分别是80和240个像素。该图表宽300个像素,高200个像素
然后将此图表的对象赋值到mychartobject中。
第9行代码将这张工作表的第一张图表也就是我们刚刚创建的这张图表赋予到mychartobject这个变量中
第11行到第16行代码,对这个图表进行一些属性的设置。其中:
第11行代码设置mychartobject对象的chart属性(也是一个对象),使之显示该行数据趋势。mychartobject.Chart的各个子属性,才是用于设置图表的各种信息。
第12行设置图表类型是折线图。
xlLine就是折线图,其他常用的的图表类型有:
饼图:xlPie;条形图:xlBarClustered;面积图:xlArea;散点图:xlXYScatter;柱形图:xlColumnClustered
第13行设置图表关联的数据区域,行我们在上面已经有变量表示了就是row并且对row进行了判断,将其限定在3至10行
因此此句就将图表数据区域动态的变化成为我们鼠标选择的那一行(仅限鼠标点在数据区域时,数据区域外图表无反应)
第14行到第15行分别是激活图表标题然后命名图表标题
到此我们的代码逻辑已经解释完毕
大家快快试试吧,这段代码小伙伴们可以保存以备不时之需哦
(0)

相关推荐