VBA概述之在Office产品中开创和谐的应用程序语言

    我所示范和付出测试的条件都以手无寸铁在Excel
二零零七上,读者如若想演习,最好也在相同的软件条件下。

   
Excel的图形事件在实际上利用中要么那多少个实用的,它能够扩大用户对Excel图表的利用,从而使操作更是简便易行。另一方面,大家得以借助于Excel图表对象的轩然大波,通过编写制定少量的代码来使大家的应用程序达成更抓牢硬的效用。例如在图纸中根据鼠标所点的多个点来生成三个曲线,将该曲线作为图表中series的一片段;也许经过鼠标的滚轮来放大或收缩图表的现实区域等。读者如若感兴趣,能够试着祥和定义不相同的图样事件处理程序来贯彻特别丰盛的作用。

    3.
VBA是变化的,在差别的Office版本中,VBA都有一些分寸的成形,这将促成你在Office
两千中编辑的VBA代码在Office 二〇〇三中不可能正确履行,反过来也一样。

    Chart对象帮助以下这几个事件:

    从Office
二零零二起头,Microsoft在Office家族中渐渐增多了过多产品,如OneNote、Publisher、InforPath、Visio等,可是除此之外对VBA中的对象举行了扩充外,在VBA的行使推广上并没有特意大的更改,而且有些产品由于使用上的标题也未尝提供对VBA的增添。

 

    5.
Excel对象有其自个儿的层次结构。三个对象能够包括别的的目的,占据层次结构最上端的是Excel,而它自己正是3个对象,在代码中叫做Application,它包罗了WorkBook和CommandBar等重大目的,WorkBook则又带有了WorkSheet和Chart等对象,WorkSheet又带有了Range和PivotTable等目的…那些层次结构的靶子组成了大家VBA代码的宗旨部分。

语言 1

    1.
Excel在自动化具体职分时期码执行的相继不变(有的时候那看起来倒是一件善事)。

  • 来得贰个提醒音讯
  • 领到图表中的消息并放置到工作表中。
  • 激活其余二个图形或工作表。
  • 鉴定分别二个数据点举行数据解析。

    5.
自定义务工作具栏。听起来有些莫明其妙!大家得以经过VBA编写的代码在Excel的工具栏上停放本身的按钮,随时点击它。

Private Sub
Workbook_AddinInstall()
    InitializeAppEvents
End Sub
 
Private Sub
Workbook_AddinUninstall()
    TerminateAppEvents
End Sub

    11.

   
使用图表事件能够进一步便利用户选取大家编辑的VBA应用程序。例如,大家能够给图表添加1个select事件,当用户点击图片数据透视图中的数据点时,为用户做这么局地事情:

   
Excel中能够利用的Active控件不是特意多,那也意味了在VBA中用户对UI的决定没有专门多的挑三拣四,当然,如若您的微型总结机上注册了其余可用的Active控件,只要允许,你一点一滴也足以把它们引用到Excel中,只要点击“Active控件”中的最终三个图标,在对话框中精选要引用的Active控件即可。VBA中控件的利用和VB中同样,那里就不再一一介绍了。回到Excel主界面,退出设计形式(只要求重新点击“设计情势”按钮即可),点击大家刚才添加的授命按钮,显示屏上边世了小编们刚刚在代码中加上的对话框。

Private Sub
Chart_Select(ByVal ElementID As Long, ByVal
Arg1 As Long, ByVal
Arg2 As Long)
    MsgBox “Element:
” & ElementID
& vbCrLf & ”  Arg 1:
” & Arg1 _
        & vbCrLf & ”  Arg 2:
” & Arg2
End Sub

语言 2   
3.
VBA模块中有众多的函数,函数一般再次来到单一值,它既能够被其他模块调用,也得以用作工作表函数来行使。

   
那样,该Excel中的全部Chart对象都会自动关联上Select事件,并且当事件触发时展现相应的提醒消息。

   
例如大家能够写三个VBA程序来格式化报表,并把它打字与印刷出来,经过开发和测试,大家最后能够只用二个指令就成功全部的办事,而不用本人入手去一个个地敲命令、点击鼠标查找菜单…Excel能够在须臾完结有着的干活,何乐不为呢?

语言,   
即便Excel基本上能用其余类型和格式的数目,不过为了方便创制图表,大家平时都会创立2个针锋相对一而再的数码区域,并给定一些有含义的值,好的数据协会将方便转变特别完美的图形。那里有五个例证,分别对A、B、C、D、E四个栏目按Alpha和Beta两体系型进行计算。

    2.
多少个VBA模块有无数“子过程”组成,它执行了“对象”上的局地操作,能够独自运行。例如大家在Excel
Sheet上添加几个Active控件(注意当先四分之一时候大家在VBA中所使用的都以Active控件而不是表单控件),比如添加叁个限令按钮,双击它,在代码编辑窗口中就足以加上相应的一声令下了。上边包车型大巴代码是当用户点击命令按钮后提示1+1的结果。

何以添加图表事件

 

语言 3  
在Excel中生成图表卓殊简单,选中上述单元格区域,选取Insert选项卡中Charts部分的图样类型,Excel会自动根据你所选的图片类型为你生成图表,如下图。

    2.
机关完毕反复的办事。要是你是一名销售经营,需求日常写一份“月底销售报告”递交给首席执行官,假使那一个报表里的数量来自同多个地点,并且表格的样式没有专门大的改变,那么你完全能够经过VBA编写二个逻辑,让Excel自个儿去收集那一个音信然后生成一张精美的表格,而以此小时里你要么去做任何更器重的政工,要么在一方面舒舒服服地喝一杯咖啡望着电脑为您干活儿。而老董也会为你有这么高的工效而对您另眼看待。

   
VBA是一种脚本语言,与别的众多的脚本语言类似(如周边的javascript语言),它是一种解释性的语言,在实施前不须求展开编写翻译,而且变量或对象在行使前不要严酷进行类型定义,那是一种弱类型的言语。不过一种好的编制程序习惯是讲求变量或对象在使用前是通过类型确认的,那样在后头的代码维护中也会便利一些,其余人在读书你的代码时也会议及展览示思路清楚。VBA私下认可不须求从严定义变量或对象,可是大家能够通过Option
Explicit语句来改变那或多或少,在模块或类模块代码的第①行写上那行语句,则未来的代码必须坚守变量或对象先定义后使用的平整。能够通过在VBE中甄选“工具-选项”,勾选“须要变量注解”来让Excel自动为你加上那行代码。

    6.
对此那几个既花时间又费精力的事宜,你再也不用坐在电脑前郁闷了,调用一个VBA编写的通令,剩下的事务你就不要管了,出去放松一下吗。

常用图表事件的选用

    先看看我们在Excel中不时会用到的VBA:

   
其余还有一种很有用的采纳,大家能够通过MouseUp事件来兑现图表的详尽内容查看功效。即Excel中设有多张主-次提到的图片,当点击主图表中的某项内容时,自动转到相应的次表,在次表中式点心击Return
区域又再次来到主表,让用户体验通过挑选主表中的分歧区域能够查看图表中详尽内容的功能。上边是1个示范程序。

 

ElementID

Arg1

Arg2

xlChartArea

None

None

xlChartTitle

None

None

xlPlotArea

None

None

xlLegend

None

None

xlFloor

None

None

xlWalls

None

None

xlCorners

None

None

xlDataTable

None

None

xlSeries

SeriesIndex

PointIndex

xlDataLabel

SeriesIndex

PointIndex

xlTrendline

SeriesIndex

TrendLineIndex

xlErrorBars

SeriesIndex

None

xlXErrorBars

SeriesIndex

None

xlYErrorBars

SeriesIndex

None

xlLegendEntry

SeriesIndex

None

xlLegendKey

SeriesIndex

None

xlAxis

AxisIndex

AxisType

xlMajorGridlines

AxisIndex

AxisType

xlMinorGridlines

AxisIndex

AxisType

xlAxisTitle

AxisIndex

AxisType

xlDisplayUnitLabel

AxisIndex

AxisType

xlUpBars

GroupIndex

None

xlDownBars

GroupIndex

None

xlSeriesLines

GroupIndex

None

xlHiLoLines

GroupIndex

None

xlDropLines

GroupIndex

None

xlRadarAxisLabels

GroupIndex

None

xlShape

ShapeIndex

None

xlPivotChartDropZone

DropZoneType

None

xlPivotChartFieldButton

DropZoneType

PivotFieldIndex

xlNothing

None

None

   
通过VBA能够开发Excel的多多功力,甚至于访问互联网能源、遍历Windows域、访问远程机器上的文书等,只要去认真讨论VBA语言自个儿提供的对象,大家还足以窥见更多让人惊呆的事物。VBA真的很有力!

     iii. 在thisWorkbook中添加上面代码

语言 4    
有关如何编写VB代码以及VB代码的着力特征已经不是本文要探讨的始末(事实上那几个情节大家在攻读电脑编制程序基础知识时也早已都打听过了),这里只对在Excel中选用VBA的局地景况做一下介绍。

   
当新的工作簿被打开或外接程序被加载时,CApp伊芙nt类被实例化并将相应的轩然大波附加到具有的Chart对象中;当工作簿被关门或外接程序别卸载时,应用程序被终止,图表事件便不再被触发。

语言 5
语言 6
语言 7

     接下来开头编写制定内嵌事件处理程序。

在Excel中开始VBA程序

   
Select事件在行使的时候有一个通病,那便是当你重新接纳同二个对象时,唯有首先次的
Select事件会被触发,而MouseUp事件则是当鼠标按键按下之后在弹起的长河中被响应,它与MouseDown事件的绝无仅有差距就在于事件触发的小时区别,MouseDwon事件是在鼠标按键按下时立即就接触。在有个别时候使用MouseUp(或
MouseDown)事件比Select事件更奏效。

    在Office
两千在此之前,VBA在Word、Excel、Access等Office系统软件中的运用是分裂等的(这1个时候Office家族中的产品为数不多),不过到Office
两千就集合起来了。Excel是率先个带有有VBA的Office产品,也是到现在应用VBA最广泛的软件之一。自Office
两千之后,Excel、Word、PowerPoint、Access中曾经有了统一标准的宏语言VBA,个中Excel和Access的VBA最为成熟(从Office
2000伊始,Office家族中的产品开始多起来)。

    上边小编根本介绍多少个常用事件的应用情势。

    9.
付出完全由宏来驱动的选取。花点时间,VBA仍是能够让您做过多特大型的应用程序,包罗定制对话框、OnScreen
Help、数据同步、数据收集工具,以及其余更加多的功能组件。

     大家须要的内嵌事件程序都在Option
Explicit语句之后编写代码,那样可防止止对象过多时混淆概念,减少编程时不须要的一无所能。

VBA的得失

    ‘ Enable events for all charts embedded on a she
et
    ‘ Works for
embedded charts on a worksheet or ch art sheet
    If
ActiveSheet.ChartObjects.Count > 0 Then
        ReDim clsEventCharts(1 To
ActiveSheet.ChartObjects.Count)
        Dim chtObj As
ChartObject
        Dim chtnum As Integer

    2.
得以一定的是,让Excel自动化一项工作一定比手动去实现要快得多(小编想没有人乐于手动去做到这几个繁琐而重复性的劳作)。

   
什么是事件的内嵌?举个简易的例子来证实那点。在VBA应用中,大家为工程里富有要求的对象一一编写事件处理程序,例如按钮的单击事件、下拉列表的精选事件,以及图片控件的激活、采用、鼠标单击事件等,不过在众多状态下,那些目的的事件处理程序完毕的都以平等件工作,尤其是在图表控件的MouseUp事件中,当事件触发时大家只想给用户四个富含详细内容的提醒消息,那样的话要是给工程里具有的图片对象都抬高相同的事件处理程序就体现有个别过于繁琐了,而且立异和尊崇代码不便利。有没有3个简易的方法来落实这一成效吗?内嵌事件可以实现这点。

   
为了让您的VBA程序如故宏代码能够胜利运维,你供给肯定一下宏的执行安全设置。点击“宏安全性”,在对话框中采取“启用全体宏”,并勾选“信任对VBA工程目的模型的拜访”。未来大家能够完全自由地去编写我们的VBA程序了。

Dim clsEventChart As New
CEventChart
Dim clsEventCharts()  As New
CEventChart

    1.
往往插入文本。即使您时不时索要在报表里插入一段文本,如公司的名称、版权消息等,你就足以写三个VBA程序来顶替你做那件事。当然那再简单不过了,类似的境况会有成百上千,例如你还能让VBA扶助你插入合营社全体员工的全名(那几个音信可能来自二个网站恐怕数据库)。

  • 为同一Worksheet中的有所Chart对象添加内嵌事件,在Worksheet对象所在的code中添加底下多少个事件:
    Option Explicit
     
    Private Sub
    Worksheet_Activate()
        Set_All_Charts
    End Sub
     
    Private Sub
    Worksheet_Deactivate()
        Reset_All_Charts
    End Sub

  • 为同一Chart标签中的全数Chart对象添加内嵌事件,在Chart标签所在的指标的code中添加下边七个事件:
    Option Explicit
     
    Private Sub
    Chart_Activate()
        Set_All_Charts
    End Sub
     
    Private Sub
    Chart_Deactivate()
        Reset_All_Charts
    End Sub

  • 为同一工作簿中的全数Chart对象添加内嵌事件,在近年来工作簿的thisWorkbook对象的code中添加底下八个事件。
    Option Explicit
     
    Private Sub
    Workbook_SheetActivate (ByVal Sh As Object)
        Set_All_Charts
    End Sub
     
    Private Sub
    Workbook_SheetDeactivate (ByVal Sh As Object)
        Reset_All_Charts
    End Sub

  • 为近期内存中全部的Workbook中的全体Chart对象添加内嵌事件。那一个有个别有个别麻烦,可比照上边包车型大巴步子添加代码:

   
前面说了那么多VBA能够做的政工(就算还远远不止这一个),那么VBA到底幸好哪些地点呢?Excel大概能活动实现具有你想做的事,只要能写出Excel命令,它就足以做到成效,所以VBA的自动化就显示了下边那一个亮点:

  1. Deactivate事件

变量赋值。同VB代码一样,在VBA代码中允许利用变量来存款和储蓄数值、文本和目的,如interest

WorkSheets(“Sheet1”).Range(“A1”).Value将工作表Sheet1的单元格A1的值赋值给3个interest变量。

    12.
对象还包涵了能够在其上调用的艺术。所谓方法,便是Excel在指标上可以进行的动作,如ClearContents被用来裁撤Range内的始末。

    13.
主意的调用和质量的获取类似,也需求动用“.”运算符,如WorkSheets(“Sheet1”).Range(“A1”).ClearContents。

    14.
VBA包蕴了现代编制程序语言的具有语言结构,如数组、分支协会、循环结构、集合对象等。

   
通过上述部分简便的介绍,相信读者已经对VBA有了3个大致的询问,作者在前面包车型客车章节旅长会陆续介绍VBA中的一些目的和用法。

 

Excel简史

   
小编觉得照旧有必不可少在这边介绍一下Excel的前进历史,因为不相同版本的Excel对VBA的协助是不雷同的。

    1. Excel
2:在Windows平台上,Excel最开首的版本号是2,那是为着和Mac平台上的Excel保持版本相同。Excel
2诞生于1989年,不过新兴大约平素不人再用它。

    2. Excel 3:于一九八六年末公布,当中XLM宏语言也随着一起发表。

    3. Excel 4:于1994年底面试,继续包括了XLM宏语言。

    4. Excel 5:一九九四年上七个月出版,VBA第二回在那几个版本中露面。

    5. Excel 95:从技术角度讲应该是Excel 7(在这之中没有Excel
6这么些本子),该版本于1994年夏天初阶问世,是3个叁十二个人的版本,运营在Windows
95和NT平台上,个中压实了一些VBA的功用,并再三再四协理XLM。不过,Excel
95的文书档案格式和Excel 5相同。

    6. Excel 97:也能够被称为Excel 8,诞生于一九九九年青女月,要求Windows
95和NT的支撑。在此版本中,VBA在效益上有了不小的增加,其接口大约全体被再次设计过,同时它还利用了崭新的文件格式(在此以前的版本无法开拓那种格式)。

    7. Excel 三千:即Excel
9,于一九九八年十一月颁发,仅提升了一丢丢职能,可是在用户体验方面千锤百炼了好多,特别是互联网用户。

    8. Excel 二〇〇一:也叫Excel 10或Excel
XP,于二零零零年下7个月公布。在那个本子中最大的性状正是数据复苏(即Excel崩溃之后能够自行回复崩溃以前的数量),同时它也是首先个使用版权爱慕的版本。

    9. Excel 2001:Excel
11,那应当是现阶段以来使用人口最多的版本,也是最好成熟的本子,可是较前一本子而言它并不曾扩充哪些新特征。

    10. Excel 二〇〇六:随Office
贰零零柒产品同时揭橥,那些版本有了非常的大的改变,除了界面风格的变更外,还扩充了按颜色筛选和排序的功用(那可是个很有用的功效,小编在Excel
二〇〇一的时候还一度用VBA开发过类似于这般的职能),同时,Office
2006的体系产品在文件格式上也有了非常的大的转移,Excel
二〇〇五的文本后缀为xlsx,它是一种截然公之于世的支撑XML可扩张的文件格式,那里有一篇小说介绍了Excel
2006的那种新文件格式。

http://blog.excelhome.net/user1/fanjy/archives/2007/940.html

   
理解Excel的向上历史和各类版本的区别是格外主要的,因为大家需求确定保证差别版本的Excel对VBA的支持景况,幸免外人在选拔我们编辑的VBA程序时出现无缘无故的不当,如VBA的Split函数是在Excel
3000中才引入的,假诺在Excel
三千在此之前的本子中动用带有Split函数的VBA程序,则会产出编写翻译错误。

 

结语

   
VBA在Excel中的应用非常普遍,深远摸底并动用VBA,可以大大进步大家在使用Excel时的工效,达到意料之外的功用。别的,顺便还要说一句,Excel在针对不相同的数据类型时得以保留为不相同品类的文本,在蕴藏VBA的Excel文件中,为了保障从此亦可得手打开文件并施行在那之中的VBA代码,建议读者将Excel文件保留为xlsm类型(它象征一种启用宏的工作簿)。

   
本文只是1个开篇,简单介绍了VBA的进化历史和行使范围,并举例表明了弹指间怎样在Excel中编辑并运维本人的VBA程序,接下去作者会详细向大家介绍VBA中丰硕多彩的指标的应用情势,当中山高校家也会看到局地玄而又玄的作用,不过这都很简单,终究VBA只是本子,它并不复杂!

 

(在此谢谢好友刘欢(英文名:liú huān)——杰夫rey 奇骏. Young提供的赞助)

    为Chart对象添加内嵌事件时存在种种分歧的图景:

   
Excel是一款功效很有力的用来拍卖表格数据的软件,它能够被用来做过多两样的做事,如记录客户的名字和学员的考试分数、进行收入和支出预算、分析实验数据、制作发货单和表格、通过给定的多少总计图表等等,Excel的种种不相同的效劳被运用到各行各业,但有一点是一致的,那就是当要处理的数据量一点都不小时,全体的用户都希望让Excel能够十一分精通地友善处理局地业务,“让Excel动起来”便是VBA能够办到的!

   
实际选择中留存诸多想不到的动静导致大家所设置的内嵌事件处理程序不可能学有所成地将相应的事件附加到Chart对象上,甚至还会引发Excel的不得了,那很广阔!此时您应有考虑InitializeApp伊夫nts进程进行的机遇,从而将该进程的推行代码移到其它的地点,那要视具体景况来定。

VBA概述

     假若程序中动用了add-in(Excel外接程序),还须要丰盛底下四个事件:

    3.
要是具有类似完美的宏代码,Excel会永远无故障地运作(可是任何代码都以反常的)。

Excel中的内嵌图表事件

 

    先介绍一下Option Explicit语句。

    10.
在行使对象属性时,必须用“.”运算符来连接对象名和属性名,如WorkSheets(“Sheet1”).Range(“A1”).Value能够查看当前工作表Sheet第11中学单元格A1的当前值。

语言 8

语言 9    
点击Visual
Basic,能够打开VB编辑器(简称VBE),我们的大致全体的VBA代码都以在此地编写的。当然,借使你已经是一人VB程序员,那么您会对这么些编辑界面再领悟但是了,它大概就和VB
6的编排界面一样,也有工程窗口、属性窗口和代码窗口,在此地我们一样可以添加控件、引用、模块以及Excel对象等成分。其余,通过增选代码编辑窗口上方的七个下拉列表,大家能够为不一样对象的两样事件编写代码。所谓事件,便是我们在点击或采用控件时所形成的一多元动作,如命令按钮的点击事件,下拉列表下拉项的采纳,复选框或单选框的抉择等。

Option Explicit

    1.
VBA中将Excel录像的宏写到3个VBA模块中(先理解精通哪些叫做VB模块),它曾经包涵了一多元独立的命令,能够作为二个VBA进程被调用。

在Excel中怎么着火速地创制图表

    1.
Excel的宏纵然能够为你自动生成一些VBA代码,但多数时候依然需求你协调去编写代码将这个效应团体起来,假诺您从未一点编制程序经验的话,那个对你的话可能有点吃力。但是万幸,VBA学起来如故很简单的。

Sub InitializeAppEvents ()
  Set clsAppEvent.EventApp =
Application
  Set_All_Charts
End Sub
 
Sub TerminateAppEvents ()
  Set clsAppEvent.EventApp = Nothing
  Reset_All_Charts
End Sub

    首先来看看大家选用VBA在Excel中能够做些什么工作。

语言 10

    2.
想要运维VBA必必要先期安装Office软件,越发是Excel。它一点都不大概像Visual Basic
For
Windows程序那样只须要双击3个exe文件就能执行起来(这看来也是脚本语言的局限性)。

    3个示范程序用于展示用户点击Chart对象中的series的有血有肉音信。

VBA在Excel中的两种习惯用法

 

1. 图表显示区域。

2. 数据透视图区域。

3. 数据透视图中用于显示数据图表的数据点。

4. 数据透视图中的坐标值。

5. 图例区域。

6. 图表的标题。

7. 用于作为tooltip的数据标签,对数据的解释。

    8.
自定义务工作作表函数。纵然Excel拥有不少的功力函数(如Sum何Average等),但总是在实际上的使用中体现不够,大家得以经过VBA添加自身的效果函数,用来成功部分特定的计算,从而简化总计进程。

     ii. 在模块第11中学添加上面包车型大巴代码

    近期,Office
二〇〇五早已到来,并且在对VBA的支撑上也应运而生了有的变迁,随着Microsoft
.NET产品各个的不断扩展和深深,.NET也置于到Microsoft的逐条不相同的产品中,而内部VSTO正是特意针对VBA在Office产品中应用的2个升官方案,我会在接下去的有的稿子中向读者介绍它。不过Excel照旧是Office家族中接纳VBA最广泛的产品,由此,笔者会以Excel为例来介绍VBA的运用,并在Office
2006软件基础上做一些示范。

Option Explicit
 
Public WithEvents EventApp As
Excel.Application
 
Private Sub
EventApp_SheetActivate (ByVal Sh As Object)
    Set_All_Charts
End Sub
 
Private Sub
EventApp_SheetDeactivate (ByVal Sh As Object)
    Reset_All_Charts
End Sub
 
Private Sub
EventApp_WorkbookActivate (ByVal Wb As
Workbook)
    Set_All_Charts
End Sub
 
Private Sub
EventApp_WorkbookDeactivate (ByVal Wb As
Workbook)
    Reset_All_Charts
End Sub

   
当然,如同全数的编制程序语言同样,VBA也会有局地毛病,从利用的角度来看有以下几点(别的不好的地方应该也都从Visual
Basic For Windows那里继承过来了):

  1. 在thisWorkbook中出席下边事件以触发内嵌事件。

    7.
制作数据表模板。通过制作数据表模板来扶持这个Excel初学者更快地做到工作,以调整和收缩他们所浪费的小时。

  1. 在模块第11中学添加上面包车型大巴代码,只怕新建多少个模块参与上面包车型客车代码。

    5.
广大类似不太大概做到的事情都足以用Excel做得漂雅观亮的(前段时间小编刚用Excel为三个网站做了一个前台数据录入工具)。

Private Sub
Chart_Select(ByVal ElementID As Long, ByVal
Arg1 As Long, ByVal
Arg2 As Long)
    Dim sElement As String
    Dim sArg As String
 
    Select Case
ElementID
        Case xlChartArea
            sElement = “Chart
Area”
        Case xlChartTitle
            sElement = “Chart
Title”
        Case xlPlotArea
            sElement = “Plot
Area”
        Case xlLegend
            sElement = “Legend”
        Case xlFloor
            sElement = “Floor”
        Case xlWalls
            sElement = “Walls”
        Case xlCorners
            sElement = “Corners”
        Case xlDataTable
            sElement = “Data
Table”
        Case xlSeries
            sElement = “Series
” & Arg1
            If Arg2 > 0 Then sArg
= “Point
” & Arg2
        Case xlDataLabel
            sElement = “Data
Label”
            sArg = “Series
” & Arg1
            If Arg2 > 0 Then sArg
= sArg & “, Point
” & Arg2
        Case xlTrendline
            sElement = “Trendline”
            sArg = “Series
” & Arg1
& “, Trendline
” & Arg2
        Case xlErrorBars
            sElement = “Error
Bars”
            sArg = “Series
” & Arg1
        Case xlXErrorBars
            sElement = “X Error
Bars”
            sArg = “Series
” & Arg1
        Case xlYErrorBars
            sElement = “Y Error
Bars”
            sArg = “Series
” & Arg1
        Case xlLegendEntry
            sElement = “Legend
Entry”
            sArg = “Series
” & Arg1
        Case xlLegendKey
            sElement = “Legend
Key”
            sArg = “Series
” & Arg1
        Case xlAxis
            sElement = IIf(Arg1 = 1,
“Primary “,
“Secondary “)
            sElement = sElement & IIf(Arg2
= 1,
“Category “,
“Value “)
            sElement = sElement & “Axis”
        Case xlMajorGridlines
            sElement = IIf(Arg1 = 1,
“Primary “,
“Secondary “)
            sElement = sElement & IIf(Arg2
= 1,
“Category “,
“Value “)
            sElement = sElement & “Major
Gridlines”
        Case xlMinorGridlines
            sElement = IIf(Arg1 = 1,
“Primary “,
“Secondary “)
            sElement = sElement & IIf(Arg2
= 1,
“Category “,
“Value “)
            sElement = sElement & “Minor
Gridlines”
        Case xlAxisTitle
            sElement = IIf(Arg1 = 1,
“Primary “,
“Secondary “)
            sElement = sElement & IIf(Arg2
= 1,
“Category “,
“Value “)
            sElement = sElement & “Axis
Title”
        Case xlDisplayUnitLabel
            sElement = IIf(Arg1 = 1,
“Primary “,
“Secondary “)
            sElement = sElement & IIf(Arg2
= 1,
“Category “,
“Value “)
            sElement = sElement & “Axis Display
Unit Label”
        Case xlUpBars
            sElement = “Up
Bars”
            sArg = “Group Index
” & Arg1
        Case xlDownBars
            sElement = “Down
Bars”
            sArg = “Group Index
” & Arg1
        Case xlSeriesLines
            sElement = “Series
Lines”
            sArg = “Group Index
” & Arg1
        Case xlHiLoLines
            sElement = “High-Low
Lines”
            sArg = “Group Index
” & Arg1
        Case xlDropLines
            sElement = “Drop
Lines”
            sArg = “Group Index
” & Arg1
        Case xlRadarAxisLabels
            sElement = “Radar Axis
Labels”
            sArg = “Group Index
” & Arg1
        Case xlShape
            sElement = “Shape”
            sArg = “Shape Number
” & Arg1
        Case xlNothing
            sElement = “Nothing”
    End Select
 
    MsgBox sElement & IIf
(Len(sArg) > 0, vbCrLf
& sArg, “”)
End Sub

    首先打开Excel,暗许安装配置下Excel
二〇〇七尚无显得“开发工具”菜单,大家需求打开它。点击窗体左上角的“Office按钮”,选用“Excel选项”,在对话框中甄选“常用”选项卡,勾选“在功效区突显‘开发工具’选项卡(D)”,明确。未来大家在Excel的菜单区就足以看到“开发工具”了,点击它,就能够起来大家的VBA程序了。

     i. 新建类模块CApp伊芙nt,添加底下的代码

    6.
自定义菜单。不仅能够定制工具栏,大家竟然能够通过VBA将本身的下令放到Excel的菜谱上,是还是不是很强啊?

Private Sub
Chart_Activate()
    MsgBox “Welcome to
my Chart!”
End Sub

    4. VBA提供了好多的已有目的,当中囊括了WorkBook、WorkSheet、Cell
Range、Chart以及Shape等关键对象。

   
修改此程序能够达成广大在Excel图表中与用户的互动成效,如弹出提醒框须要用户反复品味某种操作,或结成MouseMove事件给出图表的自定义提示新闻等。

    6.
同类对象协会在同步就形成了集聚,如WorkBook中含有的具有WorkSheet被称之为WorkSheet集合,而Chart集合则由总体的Chart对象组成。

  1. Select事件

    10.
制作完全属于本身的Excel插件。Excel自个儿的插件已经重重了,平日状态下都够用,可是大家依旧得以由此VBA开发属于本身的专有插件。Excel中用来生成总括图表的成效就是一个插件,叫Analysis
ToolPak。

     选取Design选项卡,在Chart
Layouts部分选取不一样的布局,能够增进图表的剧情,如添加图表的名目、设置图例的来得地方等。通过Excel提供的图片成效,我们得以给图表添加许多因素,依照Excel自带的表达文书档案上的牵线,3个针锋绝对较完整的图样应该包括七个单元。

语言 11

  1. 在工程中添加新的类模块,取名为C伊夫ntChart,编写如下代码。

    8.
Excel中的当前移动目的足以让大家在代码中采纳一种便利的点子来调用对象。如果Book1.xls正是时下正值编纂的工作表,那么刚才大家引用对象的法门就能够简写为WorkSheets(“Sheet1”).Range(“A1”)。当然,要是当前编辑的工作表正是Sheet1,能够向来写成Range(“A1”)。

   
Excel的VB编辑器中列出了已有的对象目录,包罗Chart对象、Sheet对象、ThisWorkbook等,假诺含有Moudle,则会含有Moudle对象,这几个指标在VBE(Visual
Basic
艾德itor)的工程能源管理器窗体中被列出来,该窗体在VBE的入手,借使没有彰显,能够透过“视图-工程能源管理器”菜单来展现它。在对象的品质窗口中能够修改对象的称号,属性窗体暗中同意在工程能源管理器窗体的花花世界,能够透过“视图-属性窗口
”菜单来体现它。双击对象名称能够打开代码窗体并给该对象编排相应的代码。那个操作与VB
6的IDE编辑器类似,假设读者对VB很熟谙的话,这一部分对你的话应该不会目生。除此之外,我们还足以通过“插入
”菜单在工程中参加用户窗体、模块和类模块。使用类模块来定义全局对象,从而实现内嵌事件。

Private Sub
CommandButton1_Click()
    Dim sum As Integer
    sum = 1 + 1
    MsgBox “The answer
is ” & sum
End Sub

语言 12

    VBA(Visual Basic For
Application)是VB语言在Office产品中的应用,它依据Visual Basic For
Windows发展而来,Visual Basic For
Windows是Microsoft于1993年出产的支付Windows应用程序的次序设计语言,由于语言精炼,易用易学,所以深受用户的迎接。而VBA的语法结构与Visual
Basic For Windows基本相似,但它们之间是有本质差异的,Visual Basic For
Windows是一种编制程序语言,它能够创立独立的应用程序,而VBA是一种语法结构类似于Visual
Basic For
Windows的脚本语言,一般的话,它都以被安置在Microsoft的Office产品中来施行的。

Private Sub
Chart_MouseUp(ByVal Button As Long, ByVal
Shift As Long, ByVal x
As Long, ByVal y
As Long)
    Dim ElementID As Long, Arg1
As Long, Arg2
As Long
    Dim myX As Variant,
myY As Double
 
    With ActiveChart
        ‘ Pass x & y, return ElementID and
Args
        .GetChartElement x, y,
ElementID, Arg1, Arg2
 
        ‘ Did we click over a point or data
label?
        If ElementID
= xlSeries Or ElementID
= xlDataLabel Then
            If Arg2 > 0 Then
                ‘ Extract x value from array of x
values
                myX =
WorksheetFunction.Index _
                  ; ;   (.SeriesCollection(Arg1).XValues, Arg2)
                ‘ Extract y value from array of y
values
                myY =
WorksheetFunction.Index _
                  ; ;   (.SeriesCollection(Arg1).Values, Arg2)
 
                ‘ Display message box with point
information
                MsgBox “Series
” & Arg1
& vbCrLf _
                  ; ;   & “””” &
.SeriesCollection(Arg1).Name & “””” & vbCrLf _
                  ; ;   & “Point
” & Arg2
& vbCrLf _
                  ; ;   & “X =
” & myX
& vbCrLf _
                  ; ;   & “Y =
” & myY
            End If
        End If
    End With
End Sub

    3.
录制宏完毕同样的动作。Excel中的宏其实也是VBA应用的一种,它是由Excel自动依据你所钦点的下令生成的VBA代码,执行那一个代码就相当于履行了那几个命令。在Excel中,大家在四个报表里做完一项工作,同时摄像了二个宏,然后能够在其余的报表里屡屡实践那个宏,Excel可以毫无保留地帮我们将那项工作“复制”在享有的报表里。

   
其实不单单指图表对象的内嵌事件,与只有的VB语言一样,Excel中的VBA也是支撑事件内嵌应用的,它支持具有VBA对象的内嵌事件编制程序。

    4.
自定义命令。在Excel中,大家得以把反复要选取的一种种操作写到多少个宏里,然后绑定到飞快键或按钮上,将来只要求利用二个火速键或点击一个按钮就能够便捷地形成一雨后春笋命令。

   
Deactivate事件在Chart对象被假释激活状态时触发。为Chart对象的Deactivate事件编写如下代码,然后释放Chart4选项卡被激活的情事(如选取其余的Sheet选项卡),事件即被触发。

    9.
Excel中各类对象都有其本身的性质。对象的性质可以领悟为对象的安装项,即就是二个单元格(Range),也有它自个儿的个性,如Value(单元格的当前值)和Address(单元格在劳作表中的地方)等。HasTitle(是还是不是包涵标题)和Type(图表类型)则是Chart对象的性质。VBA允许用户判断或转移对象的属性值。

        chtnum = 1
        For Each chtObj
In ActiveSheet.ChartObjects
            ‘ Debug.Print chtObj.Name,
chtObj.Parent.Name
            Set
clsEventCharts (chtnum).EvtChart =
chtObj.Chart
            chtnum = chtnum + 1
        Next ‘
chtObj
    End If
End Sub

 

Private Sub
Chart_Select(ByVal ElementID As Long, ByVal
Arg1 As Long, _
                  ; ;        ByVal Arg2 As Long)
    If ElementID = 3 And Arg2
> 0 Then
        With
ActiveChart.SeriesCollection(Arg1).Points(Arg2)
            .ApplyDataLabels Type:=xlShowValue
        End With
     End If
End Sub

    7.
凡是层次结构中的对象都足以在VBA中央银行使,跟大多数面向对象语言一样(即便VB和VBA还不可能被誉为完全意义上的面向对象语言),我们选取“.”运算符来调用。如Application.WorkBooks(“Book1.xls”),它表示WorkBooks集合中的一个名称为Book1.xls的指标(该对象为3个Excel文件),然后我们得以在这一个目的中援引Sheet对象,如Application.WorkBooks(“Books.xls”).WorkSheets(“Sheet1”)。假如想进一步钦点四个切实可行的单元格,就足以那样Application.WorkBooks(“Books.xls”).WorkSheets(“Sheet1”).Range(“A1”)。

      其它再提交1个Select事件的施用,读者能够友善作证一下。

    4.
任何人都得以用Excel自动化一项具体做事,即便他毕生不懂电脑编程(Excel的宏录制效用帮了不小的忙)。

   
在接下去的剧情中,小编会向我们介绍Excel中图纸对象的一些常用事件的使用方法,并会提交相应的示范。

Private Sub
Chart_MouseUp(ByVal Button As Long, ByVal
Shift As Long, _
        ByVal x As Long, ByVal y
As Long)
 
    Dim ElementID As Long, Arg1
As Long, Arg2
As Long
    Dim myX As Variant
 
    With ActiveChart
        ‘ Pass x & y, return ElementID and
Args
        .GetChartElement x, y,
ElementID, Arg1, Arg2
 
        ‘ Did we click over a point or data
label?
        If ElementID
= xlSeries Or ElementID
= xlDataLabel Then
            If Arg2 > 0 Then
                ‘ Extract x value from array of x
values
                myX =
WorksheetFunction.Index _
                  ; ;   (.SeriesCollection(Arg1).XValues, Arg2)
 
                ‘ Don’t crash if chart doesn’t exist
                On Error Resume Next
                ‘ Activate the appropriate chart
               
ThisWorkbook.Charts(“Chart ” &
myX).Select
                On Error GoTo 0
            End If
        End If
    End With
End Sub

   
其它图表事件读者能够友善去品味,它们在其实使用中动用得不是诸多,而且相对来说使用都相比较不难,那里笔者就不再一一给出例子了。上边重点说一下在Excel中什么运用内嵌的图样事件。

Option Explicit
 
Private Sub
Workbook_SheetActivate (ByVal Sh As Object)
    Set_All_Charts
End Sub
 
Private Sub
Workbook_SheetDeactivate (ByVal Sh As Object)
    Reset_All_Charts
End Sub

Private Sub
Workbook_Open()
    InitializeAppEvents
End Sub
 
Private Sub
Workbook_BeforeClose (Cancel As Boolean)
    TerminateAppEvents
End Sub

 

 

语言 13

  1. Activate事件

   
在这之中myX变量保存了当下主表中被入选的series的值,然后通过ThisWorkbook.Charts
(“Chart ” &
myX).Select方法在整整Excel工作簿中追寻名称与之相呼应的Chart对象,并当选它。你一点一滴可以本人编写名称匹配的算法,然后自动选中要查看的图样,恐怕采用ThisWorkbook,Sheets().Select方法选中要翻开的工作表等等。

  • Active:当Chart对象被激活时接触。
  • BeforeDoubleClick:鼠标双击前触发。
  • BeforeRightClick:鼠标右键单击前触发。
  • Calculate:使用公式运算时接触。
  • Deactivate:当Chart对象释放激活状态时触发。
  • DragOver:当Chart对象被拖动时接触。
  • DragPlot:当Chart对象中的数据透视图被拖动时接触。
  • MouseDown:鼠标按下时接触。
  • MouseMove:鼠标移动时接触。
  • MouseUp:鼠标按下,然后卸掉按键时触及。
  • Resize:调整Chart的大时辰触发。
  • Select:Chart中的对象被增选时接触。
  • SeriesChange:改变Chart中的图标体系时接触。

语言 14

   
使用Select事件能够精通Chart对象的哪一部分被接纳了。该事件有七个参数,ElementID
被用来报告Chart对象的哪一部分被增选了,后两个参数Arg1和Arg2则会根据ElementID的不一致值传递一些相当的音讯,如当Chart对象中的series被入选,则Arg1被用来告诉哪三个series被选中了,而Arg2被用来告诉被入选的
series中被入选的具体地点。当整个series被选中时,Arg1的值为-1,假设Chart的其余对象被入选,Arg1和Arg2的值为0,此时未曾别的附加的音讯。下表列出了该事件中八个参数可能的全部值。

Dim
clsAppEvent As New
CAppEvent

Sub Reset_All_Charts()
    ‘ Disable events for all charts previously enabled
to gether
    Dim chtnum
As Integer
    On Error Resume Next
    Set clsEventChart.EvtChart = Nothing
    For chtnum = 1 To UBound
(clsEventCharts)
        Set clsEventCharts(chtnum).EvtChart = Nothing
    Next ‘
chtnum
End Sub

   
Activate事件在Chart对象被激活时接触。假设为Chart对象的Activate事件编写了如下代码,则在前方所举的演示中,当咱们选用Chart4选项卡时,该事件会被触发。

Option Explicit
 
‘ Declare object of type “Chart” with
events
Public WithEvents EvtChart As Chart
 
Private Sub
EvtChart_Select (ByVal ElementID As Long, _
        ByVal Arg1 As Long, ByVal
Arg2 As Long)
 
    MsgBox “Element:
” & ElementID
& vbCrLf & ”  Arg 1:
” & Arg1 _
        & vbCrLf & ”  Arg 2:
” & Arg2
 
End Sub

     
选取Chart对象中的差异部分,弹出的对话框中会给出相应的音讯。注意,当你挑选
series时,第三遍当选的是整套series对象,此时Arg2的值为-1,再度点击series,选中的是现实的series,此时
Arg2的值为series被选中的point值。下面是因此修改后的事件代码,突显了当Chart对象被选中时的总体消息,
Excel定义了无数常量来表示ElementID参数的值。

语言 15 

Sub Set_All_Charts()
    ‘ Enable events for active sheet if sheet is a&n
bsp;chart sheet
    If TypeName(ActiveSheet) = “Chart” Then
        Set clsEventChart.EvtChart =
ActiveSheet
    End If

   
与其余的VBA控件类似,要想为图表对象添加事件,必须首先进入到Excel的Visual
Basic
编辑器。在上图中,右键点击Chart4选项卡(在Excel窗体的下端),选用“View
Code”,即可打开 Visual
Basic编辑器。大概在“开发工具”选项卡中直接点击Visual
Basic按钮。要是是从当前图表所在的价签进入的Visual Basic编辑器,则Visual
Basic编辑器窗口中暗中认可打开的是现阶段图表的Code窗体,在Code窗体的顶部有八个下拉列表,在左手的下拉列表中接纳Chart,左侧的下拉列表中即突显了Chart对象支持的有所事件名称,暗中认可是Active事件,即Chart被激活时所接触的风云。

语言 16

   
依据上述方法创制的图形默许是嵌套在Excel工作表中的,大家也能够创设贰个单身的图片在Excel中内定的地点显得。在Design选项卡中找到Location部分,选拔Move
Chart,弹出的对话框如下图所示,选拔New
sheet,并定义一个有含义的名目,点击OK,此时Excel会在二个新的sheet中开创图表。那里有3个神速成立图表的方法,选中要开创图表的单元格区域,间接按F11,Excel会依据暗中认可的选项在新的sheet中生成图表。在新
sheet中生成的图样能够在VBA中作为对象来进展访问,同时也得以编写制定事件处理程序,稍后会介绍。

Private Sub
Chart_Deactivate()
    msg = “Thanks for
viewing the chart.”
    MsgBox msg, , ActiveWorkbook.Name
End Sub

为何要使用图表事件

   
先来看看MouseUp事件的参数(MouseDown事件的参数与之相同)。Button参数被用来报告鼠标的哪个按键导致了风云的触及,xlNoButton-无按键,xlPrimaryButton-主按键,xlSecondaryButton-次按键,
xlMiddleButton-中间的按键;Shift参数被用来报告当事件被触发时使用了怎么着键盘组合键,它有陆个基础值,0-没有行使组合键,1-Shift键,2-Ctrl键,4-Alt键,① 、贰 、4五个值任意相加的结果即意味着了四种分裂的组合键,如
Shift的值为5则代表Shift+Alt的组合键;最终七个参数x和y用于表示当事件触发时鼠标所处的坐标值。

    
Excel中的许多对象都能够响应事件,那中间囊括了Excel程序自己的风浪,也包含了笔者们在Excel中开发VBA应用程序时在指标上所附加的事件处理程序,如按钮的响应事件、单元格被入选的风浪、工作表被激活的轩然大波等。大多数的事件处理程序大家都熟谙,本文在此首要介绍一下Excel中的图表事件。

  1. MouseUp和MouseDown事件

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图