VBA,是Visual Basic for Application的简称。它是一种面向对象的宏语言。其主要用途是用来扩展Windows的应用程序,特别是Office软件。因此,熟练地掌握这门语言可以提高Windows平台和Office软件日常办公效率,实现业务逻辑的定制化和自动化。
1、对象、属性和方法
熟悉一些编程语言的朋友对这些术语可能不陌生。简介也提到过,VBA是面向对象的脚本语言。如果你熟悉这些概念,你可以跳过。如果你不太明白,我给你讲个故事。故事是这样的:话说某年某一天,某某拿着一个白色的碗,拄着破旧的老竹竿行走在车水马龙的街道上,在拥挤的人流中,它环顾着四周,突然,它发现了一个角落,嗯,这地方不错,他说道。然后它放下碗,将兜里的支付宝二维码纸片放在地上......。这个故事中:某某,碗,竹竿及纸片就是对象,白色是碗的属性,拿着、拄着和行走等是这个人的行为,即方法。相应于Excel应用程序而言,Application就是Excel应用程序对象,Worksheets就是Excel工作表对象集合。例如:WorkSheets('xxx').Name,其中WorkSheets('xxx')代表工作表xxx对象,Name就是xxx工作表的名字属性。WorkSheets('xxx').Close,Close就是xxx工作表的关闭方法。因此,只要熟练掌握了Excel对象模型层次结构,这门语言就很简单啦。以下列出一些常用的对象(依附于对象的方法或属性比较多,不列举出来):
2、数据类型
VBA包含十几种数据类型,其内容包括:Byte(字节型);Boolean(布尔型);Integer(整型);Long(长整型);LongLong;LongPtr;Single(单精度浮点型);Double(双精度浮点型);Currency(变比整型);Decimal;Date;Object;String(变长和定长)、Variant(数字和字符)及用户自定义类型等。为什么要划分如此多的数据类型呢?你可以想想商店卖啤酒为什么按瓶卖给客户,工厂生产啤酒为什么用桶装。很显然,为了尽可能地减少计算机内存的占用,合理使用和分配内存,使程序更高效、更快速地运行,使用合适的数据类型声明变量是有必要的。
既然VBA定义了这么多数据类型,那么接下来,我们就需要声明常量和变量了。声明常量语法如下:
Public和Private是可选的。其中,Public是用于在模块级别中声明在所有模块中对所有过程都可以使用的常量,在过程中声明常量不能使用Public。Private:用于在模块级别中声明只能在包含该声明的模块中使用的常数,不能在过程中使用(参数信息可以参考文档,如下图所示):
声明变量有四种方式:Dim、Public、Private和Static,其中最常用的是Dim,其语法格式如下:
WithEvents是可选的,表示声明varname是一个用来响应由ActiveX对象触发的事件的对象变量。只在类模块中才有效。
subscripts是可选的,表示数组变量的维数。
New是可选的,表示隐式创建对象。若使用New来声明对象变量,在第一次创建引用变量时将创建该对象的实例。因此,不必再使用Set语句对该对象赋值。例如 使用Excel调用外部引用对象Outlook.Application。可以有以下两种写法:
或者这样写:
其中,第二种方式直接创建对象的实例了,因此不必再使用Set获取实例对象了。
3、操作符
VBA主要有算术操作符、比较操作符、连接操作符及逻辑操作符等四种运算符包括,其内容如下所示:
算术操作符为:+(加法);-( 减法);*( 乘法);/ (除法);\ ( 取整 除法);^ (幂);Mod (求余)。
比较操作符为:<><= (小于或等于);=""> (大于);>= (大于或等于);= (等于);<> (不等于);Like(字符串的比较);Is(对象引用比较)。
逻辑运算符为:And (逻辑与);Or (逻辑或);Not (逻辑非);Eqv(逻辑等价); Imp(逻辑蕴含);Xor(逻辑互斥)。
连接操作符为:&(连接);+( 有条件的连接操作)。
其他操作符基本很好理解,除了+运算符。+运算符具有两义性。当至少有一个表达式不是Variant类型情况下,两个表达式都是字符串或者其中一个表达式是字符串,另一个是除Null的任意Variant时,+代表字符串连接。如下所示:
当两个表达式都是 Variant 的情况下,表达式都是字符串时,+表示字符串连接操作。如下所示:
4、过程
VBA有三种过程,分别为:Sub过程、Function过程和Property过程。其中Sub过程和Function过程最常见也最有用,接下来主要说明这两种过程。
Sub过程是使用Sub语句声明的子过程,使用开发工具中的录制宏按钮录制出来的过程都是Sub过程。其语法格式如下:
一些重要的参数解释如下:
Function过程语法
Function语法与Sub语法基本一致,除增加了Function返回的类型一项以外。它们的区别主要在于:Function只能返回引用对象的某个属性值或者运算结果,而不能对对象的属性、格式等信息进行改变,而Sub过程却可以这样做。
以上内容简单地介绍了VBA的一些语法知识。像VBA函数,循环语句,条件语句、事件、具体对象的使用等VBA知识,还未涉及在内。这些内容将在以后的文章中分享给大家。另外,上述语法内容有些参数还未详细说明,或者你希望获取更多关于VBA语法与对象的知识,小编分享两份VBA开发者手册(一份是《英文版Office2013开发者手册》,一份是《中文版Office2003开发者手册》,如下图所示)给大家,希望对大家编写VBA宏语言有所帮助。手册下载链接内置在头条号自动回复中,中文版请留言cn,英文版请留言en即可获取百度云下载链接。
VBA语法知识和帮助文档都一一介绍完了。接下来,我给大家编写三个VBA应用实例吧~~~
一、读取Excel活动工作簿中各个工作表的名称,并写入到第一张工作表中。
代码如下所示:
二、将图1数据按照ABCD类别进行合并,形成图2的数据格式。
图1
图2
代码如下所示:
说明:
三、将上图图2数据按照分隔符拆分成图1数据格式。
代码如下所示:
方法同例2,使用了VBA函数Split将单元格中的值按照分隔符Delimeter分开,再循环写入相应数据,Split函数用法请参考帮助文档。
=>联系客服