本帖最后由 佛山小老鼠 于 2012-9-24 20:31 编辑
该贴已经同步到 佛山小老鼠的微博
动态图表=函数+VBA 往往大家做动态图表时,都会想到函数Index和Offset函数来做,没有错,但是你实现之后,每次要用鼠标去点一下,动态图表才会变一下,这个地方我们就用VBA来弥补函数的不足 我现在用一个实例来讲解一下 第一步:在B14单元格输入1 解释:目的是为了做VBA里的变量的临时值,现在是空的,所以先输入一个值代替,便于大家理解 第二步:在B15单元格输入公式
- ="动态图表"&"("&INDEX($A$1:$L$1,1,$B$14)&")"
复制代码 解释:作为图表的标题,Index第一个参数是一年的十二个月,第二参数是B14,是变量,由VBA代码运行时决定, Range("B14").Value2 = i
第三步:在B16单元格输入函数,向下填充公式
- =INDEX($A$2:$L$12,ROW(A1),$B$14)
复制代码
解释:index函数是这个动态图表的核心,图表数据的变化主要由Index函数的第三参数决定,因为第三参数一改变,整个区域都会发生变化,当第三参数是是1时,显示一月份的数据,当第三参数是2时,显示二月份的数据
第四步:作图和美化图表,作出来如下图 第五步:Alt+F11打开VBE编辑器,插入菜单,插入模块,把代码贴到模块里 Dim i As Integer '定义i为模块级别的变量,不能定义为过程级别的变量,因为过程级别变量当过程结束时,变量作用周期也就结束了
[code=vb]Sub 时长()
Range("B14").Value = i '给单元格B14赋值为变量i
i = i + 1 '累加i
If i > 12 Then '如果i大于12,那么i的值又从1开始
i = 1
End If
Application.OnTime Now + TimeValue("00:00:01"), "时长" 'Ontime事件,每隔1秒又把过程转到“时长”过程,这样起到了循环的作用
End Sub
Sub 停止()
On Error Resume Next '防止程序出错
Application.OnTime Now + TimeValue("00:00:01"), "时长", , False '结事OnTime事件“时长”
End Sub
[/code]
第六步:把“时长”过程指定给“开始按扭”,把“停止”过程指定给“停止按钮”
解释:Offce按钮(2007版的),EXCEL选项,常规,勾起显示“开发工具”选项卡
然后,开发工具,控件组,插入,表单控件,命令按扭,在工作里画一个,单元右键,指定宏。
|