VBA(Visual Basic for Applications)是
Visual Basic的一种
宏语言,是在其
桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展
Windows的应用程序功能,特别是
Microsoft Office软件。它也可说是一种
应用程式视觉化的 Basic 脚本。
相关信息
Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。它与传统的宏语言不同,传统的宏语言不具有高级语言的特征,没有
面向对象的程序设计概念和方法。而VBA 提供了面向对象的程序设计方法,提供了相当完整的
程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。
VBA是基于
Visual basic发展而来的,与VB具有相似的
语言结构。从语言结构上讲,VBA是VB的一个子集,它们的语法结构是一样的。两者的
开发环境也几乎相同。但是,VB是独立的
开发工具,它不需要依附于任何其他应用程序,它有自己完全独立的工作环境和编译、链接系统。VBA却没有自己独立的工作环境,它必须依附于某一个主应用程序,VBA专门用于
Office的各应用程序中,如Word、 Excel、 Access等。在
Access中,可以通过VBA编写模块来满足特定的需要。
正是由于VBA与主
应用程序的这种关系,使得它与主程序之间的通信变得简单而高效。它与
AutoCAD完全共享内存空间,所以执行速度比用
C语言开发的
ADS应用程序要快很多。
VBA提供了
面向对象的程序设计方法,提供了相当完整的
程序设计语言。它的编写是以子过程和函数为单位,在 Access中以模块形式出现。
Office取得巨大成功的一个重要原因就是VBA,使用VBA可以完成很多事情,基于Excel、Word的VBA小程序不计其数。Office中的应用程序可以共享VBA语言,如果掌握了在
Excel 2016中使用VBA的方法,那么在Word、
Power Point中使用VBA自然会变得易如反掌。掌握对VBA语言的使用,可以让复杂的工作简易化,减少不必要的重复性工作,大大提高我们的工作效率。
VBA程序员很多是业余程序员,正因为业余,解决的却是工作中需要解决的问题;所以,VBA程序大多都是只是在部门内部或个人使用的小工具。集成了VBA的其他
应用程序也很多,但真正能为程序增色的不多。
大多数人看到了VBA可以
自动化一个程序,可以扩展已有程序,但没有看到在
Office中,VBA代码可以是录制的,而不是写出来的,带来的好处是,
学习曲线变得非常缓。如果没有宏录制功能,要熟悉某个Office组件的对象模型,绝非一日之功。
以ArcGIS为例,
ArcGIS扩展必须使用ArcObject,不管是使用VBA也罢,VB也罢,还是C++也罢。但同时,ArcObject的学习不是一天两天可以搞定,对于业余程序员,要使用VBA来扩展ArcGIS,几乎没有可能;专业程序员又不屑使用VBA;而对于公司,如果要基于ArcObject来扩展ArcGIS,选择VBA意味着
源码的保护很困难。所以,ArcGIS的VBA就如同鸡肋。
VB 与VBA
VBA 是基于Visual Basic 发展而来的,它们具有相似的语言结构。Visual Basic 是Microsoft 的主要图形界面开发工具,VBA 5.0 (亦即VBA 97)则是Visual Basic 5.0 的子集。Visual Basic 是由Basic 发展而来的
第四代语言。Visual Basic 作为一套独立的 Windows 系统开发工具,可用于开发Windows 环境下的各类应用程序,是一种可视化的、
面向对象的、采用
事件驱动方式的结构化高级程序设计语言。它具有高效率、简单易学及功能强大的特点。VB 的程序语言简单、便捷,利用其事件驱动的编程机制,新颖易用的可视化设计工具,并使用Windows
应用程序接口(API)函数,采用动态链接库(DLL)、动态数据交换(DDE)、对象的链接与嵌入(OLE)以及开放式数据库访问(ODBC)等技术,可以高效、快速地编制出 Windows 环境下功能强大、图形界面丰富的应用软件系统。
Visual Basic 程序很大一部分以可视(
Visual)形式实现,这意味着在设计阶段就可以看到程序运行的屏幕画面,用户可以在设计时能够方便地改动画面图像、大小、颜色等,直到满意为止。VB 的用户可以是缺乏Windows 及C 语言开发经验的专业软件人员,也可以是具有一定
Windows开发经验的专业人员,VB 的
可视化编程方法使得原来繁琐枯燥、令人生畏的Windows 应用程序设计变得轻松自如、妙趣横生。以往的Windows 应用程序开发工具在设计
图形用户界面时,都是采用编程的方法,并伴随大量的计算任务,一个大型应用程序约有90%的程序代码用来处理用户界面,而且在程序设计过程中不能看到界面显示的效果,只有在程序执行时才能观察到,如果界面效果不佳,还需要回到程序中去修改。Visual Basic 提供了新颖的可视化设计工具,巧妙地将Windows
界面设计的复杂性封装起来,程序开发人员不必再为界面设计而编写大量程序代码,仅需采用现有工具按设计者要求的布局,在屏幕上画出所需界面,并为各图形对象设置属性即可,VB 自动产生界面设计代码,这样便将事先编制好的控件可视地连接到一起,构成一个随时可调整的界面。
VBA 不但继承了VB 的开发机制,而且VBA 还具有与VB 相似的语言结构,它们的
集成开发环境IDE(Intergrated Development Environment)也几乎相同。但是,经过优化,VBA 专门用于Office 的各应用程序。VB 可运行直接来自Windows 95 或NT 桌面上的应用程序,而VBA 的项目(
Project)仅由使用VBA 的Excel、Word、 PowerPoint 等称为宿主(Host)的Office 应用程序(
Application)来调用。
区别
1. VB是设计用于创建标准的
应用程序,而VBA是使已有的应用程序(
EXCEL等)自动化。
2. VB具有自己的开发环境,而VBA必须寄生于已有的
应用程序。
3. 要运行VB开发的
应用程序,用户不必安装VB,因为VB开发出的应用程序是
可执行文件(*.EXE),而VBA开发的程序必须依赖于它的父应用程序,例如EXCEL。
4.VBA是VB的一个子集。
尽管存在这些不同,VBA和VB在结构上仍然十分相似。事实上,如果你已经了解了VB,会发现学习VBA非常快。相应的,学完VBA会给学习VB打下坚实的基础。而且,当学会在
EXCEL中用VBA创建解决方案后,即已具备在WORD ACCESS OUTLOOK FOXPRO POWERPOINT 中用VBA创建解决方案的大部分知识。
* VBA一个关键特征是你所学的知识在微软的一些产品中可以相互转化。
数据类型
基本数据类型
即Primary Type Data,下述列表的括号内为
字节数:
自定义的数据类型
Type 自定义类型名 元素名 As 类型 … [元素名 As 类型] End Type
数组
常量
系统定义常量
系统定义常量有3个:True、False和Null。
固有常量
固有常量是编程时引用的对象库定义的常量。所有固有常量都可以在
宏或VBA代码中使用。通常,固有常量通过前两个字母来指明定义该常量。来自VB库的常量则以“vb”开头。来自
Access的常量以“ac”开头。可以使用对象浏览器来查看所有对象库中的固有常量列表。
在VBA中,常量的
数据类型有整型、长整型、
单精度型、双精度型、
字节型、
货币型、字符型、日期型和逻辑型。一个整型数据就是一个整型常量,一个长整型数据就是一个长整型常量。例如,12%、-1%是
整型常量,32768&、10000000&是长整型常量,-2.5 1、3.14是单精度实型常量,3.1415926#是双精度实型常量,China、Shanghai是字符型常量,#07/13/2001 11:45PM#是日期
常量,由符号 “ # ” 将字符括起来。
符号常量
可以自行定义的常量即
符号常量,必须先定义,后使用。可见,需要声明的常量都是
符号常量。
基本语法格式:
如:Global Const
符号常量名称 = 常量值
语句功能:
定义一个符号常量,并将指定
表达式的值赋给
符号常量。
语句说明如下:
1)“常量名”指定
符号常量的名字。符号常量名可以由字母、数字和下画线组成,但只能以字母开头,不能含有空格。
2)“表达式”指定
符号常量的值。该表达式通常由数值型、字符型、逻辑型或日期型数据以及各种
运算符组成,但在表达式中不能出现
变量和函数。
3) public用来表示这个常量的作用范围是整个
数据库的所有模块。
4) private则表示这个常量只在使用该声明常量语句的模块中起作用。
说明:
1)除用户定义的
符号常量外,VBA还提供了许多
符号常量,我们可以直接使用。
2)对数码比较长,并且在程序中多次使用的常量,通常使用
符号常量代替。运行程序时,系统自动把程序中的所有符号常量换为赋给它的值。
变量
与
常量一样,
变量也是一块
内存空间,用于保存程序运行过程中可能变化的数据。变量的名称是用户定义的一个标识符。
在代码中需要使用该变量时,只需引用相应的
标识符即可,而不用管变量当前的值具体是什么。
声明
与用户自定义的常量相似,变量在使用之前都需要
声明,在VBA中声明变量的语法格式有以下几种:
在第二种语法格式中, “变量n”的
数据类型为AS关键字后定义的数据类型,而“变量1”、“变量2”、…的数据类型为变体型。
在VBA中,可用
Dim、
Private、
Public和
Static这4个关键字来声明变量,使用不同关键字声明的变量其含义也有所不同。
◆ 利用Dim关键字声明变量:
Dim关键字主要用来在内存中分配一块空间,并为该空间命名,是VBA中声明变量最常用的关键字。使用Dim关键字声明的变量只能在当前过程或模块中使用。
◆ 利用Private关键字声明变量:
Private关键字用于在类模块中声明一个私有变量,它只能在当前的类模块中使用。当定义变量的位置同处于类模块中时,其使用效果与使用Dim关键字定义的变量相同。
◆ 利用Public关键字声明变量:利用
Public关键字声明的变量可以在程序的任何地方调用,而与声明变量的位置无关。
◆ 利用Static关键字声明变量:
Static关键字用于声明静态变量,即变量的值在整个代码运行期间都能被保留。
赋值
变量在使用时还需要对其进行
赋值。在VBA中对变量进行
赋值可通过 “ = ” 符号或 “ Set ” 关键字进行。通过 “ = ” 符号对变量赋值的语法格式有以下几种。
如果在定义变量时指定了变量的
数据类型,则为变量所赋的值也必须是该数据类型的值。如果变量定义为Integer类型,而在赋值时却给了变量一个
String类型的数据,则在编译运行的过程中将弹出错误弹框。
运算符
运算符是在程序中执行计算功能的某些特殊符号,它是程序代码的重要组成部分。在程序代码中,
运算符不能单独使用,必须与其
操作数共同组成表达式后才具有运算意义。VBA中的运算符包含
算术运算符、连接运算符、
比较运算符和
逻辑运算符等。
算术运算符
算术运算符主要用于执行
四则运算,仅用
算术运算符连接起来的表达式称为算术表达式。算术运算符及其作用与示例如表所示。
注意:
在执行算术运算时,
运算符两侧操作的数据类型必须相同,否则会出现“类型不匹配”的错误提示。当“+”运算符左右两侧都是字符串类型的
操作数连接运算符
连接运算符的作用是将运算符两侧的
操作数连接成一个数,其
操作数的数据类型通常都为String类型。VBA中的连接运算符有“&”和“+”两种,由于使用“+”执行连接运算时,容易与加法运算混淆,所以通常都采用“&”进行连接运算。
比较运算符
比较运算符可以对运算符两侧的操作数执行比较运算,其返回结果为
Boolean类型的True或False。比较运算符的操作数通常为具体的数值,当操作数为字符串或其他符号时,是根据该符号的
ASCII码进行比较的。VBA中的比较运算符及其作用与示例如表所示。
逻辑运算符
逻辑运算符用于对
运算符两侧的
操作数执行逻辑运算,参与逻辑运算的操作数本身可以是逻辑表达式(表达式的最终结果为True或 False),也可以是
算术表达式(表达式的最终返回值为0或非0)。
在逻辑运算中,数值0与逻辑值 False相同,表示逻辑假;非0数值与True相同,表示逻辑真。
逻辑运算符及其含义与示例如表所示。
语法结构
if 语句
Select Case 语句
其中的表达式列表可以为:
Do...Loop 语句
For...Next语句
For Each … Next语句
跳出本次循环的continue语句
With语句
On Error语句
或
具有控制作用的函数
其他语句
注释语句
语句的连写与续行
如果一行包括多条语句,用冒号分割各个语句。跨多行的语句,在行末用“空格加下划线”表示续行。
过程与函数
调用函数/过程时,可以加括号或者不加括号。如果
调用表达式作为一行的一部分,那么必须用参数,例如函数调用的返回值赋给变量。 调用过程时, 可以使用/不使用call关键字。使用
call语句调用过程,如果无参数,则不加括号;如果有参数,必须加括号。如果调用时用括号包住单个参数,则该参数强行按值传递。需要特别注意,不用call不加括号的调用,
形参与
实参是传值(passed by value)而不是传
引用(passed by reference),这会导致一些对象的方法调用失败。例如:
常用内置函数
VBA的常用内置函数:
日期/时间有关函数:
转换函数:
CBool、
CByte、CCur、
CDate、 CDbl、
CDec、CInt、
CLng、CLngLng、CLngPtr、CSng、CStr、CVar、
CVErr、Asc(<字符串表达式>)返回第一个字符的
Ascii编码值、
Chr(
ASCII码)返回字符、Hex、
Oct、
Str(<数值表达式>)返回字符串、Val(string)、
Format、
FormatCurrency、FormatDateTime、FormatNumber、
FormatPercent、
MonthName。
数学函数:Abs、Sqr、Tan、Atn(即atan)、Sin、Cos、Exp(e为基的指数)、Log自然对数
CallByName: get or set a property, or invoke a method at run time using a string name.
控制流:
Choose:类似于C语言的
select语句、If相当于IF-ELSE语句、Switch
Command:获取命令行参数
CurDir:返回指定驱动器的当前工作路径
由基本数学函数导出的函数:Sec、Cosec、Cotangent、Cotan、Arcsin、Arccos、Arcsec、Arccosec、Arccotan、HSin、HCos、HTan、HSec、HCosec、HCotan、HArcsin、HArccos、HArctan、HArcsec、HArccosec、HArccotan、LogN
文件操作:
Error:错误号对应的错误消息
GetObject:ActiveX组建的引用
IMEStatus:返回当前Input Method Editor (IME)
Macintosh平台:MacID、MacScript
金融函数:
Partition:返回字符串,表示一个数值名字落在各个range内。常用于SQL select语句
QBColor:颜色值
RGB:颜色值
TypeName:得到变量的类型名
VarType:得到变量的类型数
用途
由于微软Office软件的普及,人们常见的
办公软件Office软件中的
Word、
Excel、
Access、
Powerpoint都可以利用VBA使这些软件的应用更高效率,例如:通过一段VBA代码,可以实现画面的切换;可以实现复杂逻辑的统计(比如从多个表中,自动生成按合同号来跟踪生产量、入库量、销售量、库存量的统计清单)等。
掌握了VBA,可以发挥以下作用:
1.规范用户的操作,控制用户的操作行为;
2.操作界面人性化,方便用户的操作;
3.多个步骤的手工操作通过执行VBA代码可以迅速的实现;
4.实现一些VB无法实现的功能;
5.用VBA制做EXCEL登录系统;
6.利用VBA可以Excel内轻松开发出功能强大的自动化程序。