导读:谭编准备撰写一本新书《Excel VBA数据处理与绘图》,希望对科研人员有帮助。
第一章 开始学Excel VBA
VBA即Visual Basic for Applications的缩写。它是古老的Visual Basic编程的自定义版本。自20世纪90年代中期以来,Microsoft Excel的宏就一直使用这种语言。Microsoft Excel集成了VBA的宏编程语言环境。这种编程语言至少可以为您实现3种用途:
1.使用宏从代码自动驱动Excel;
2.创建新的自定义工作表函数;
3.将Excel与其他应用程序交互。
作为科研人员,经常需要对科研数据进行科学运算,可以利用Excel VBA的强度编程环境,设计界面,编写代码,按特定的科学模型和科学算法操控Excel实现运算过程、显示运算结果图像。此外,利用VBA编程还可操控Microsoft Word、PowerPoint、Internet Explorer、记事本等程序。
1.1 第一个程序Hello world
1.1.1打开Excel的VBA
1.1.2 窗口的设计
在编写代码前,我们插入一个简单的窗体,在窗体中绘制一个按钮。在VBE窗口,选择菜单“插入→用户窗体”,选择工具箱的按钮工具,在新建的窗体中画出一个按钮。
1.1.3 代码的编写
在对窗体以及其中的按钮、文本框等对象编程时,可以双击该对象打开代码窗口进行编程。例如双击按钮后,在打开的代码窗口中,光标移到第一行输入“OptionExplicit”进行强制约定。
在编程中将某些具体功能编写成函数(Function)或子模块(Sub),利用按钮或其他对象的点击等事件调用这些函数,基于这种思想,可以使程序模块化,方便后续维护。例如给按钮的Click事件添加调用Example子模块,双击按钮,在其模块中添加一行代码“Call Example”,即可实现对Example()的调用。
接下来定义这个Example()子模块,在代码窗口中任意行编写代码如下:
Option Explicit
Sub Example()
Dim a As Integer
a = 2
Debug.Print a
Dim b As Long
b = a + 2
Debug.Print b
Dim c As String
c = "Hello, world!"
Debug.Print c
End Sub
为了提高代码的可读性,通常选将模块中的代码按其逻辑关系进行不同级别的缩进。
Dim 用于申明变量及类型,可以将多个变量的申明写在一行代码中,用英文逗号分隔。常用的数据类型:布尔型Boolean(True或False)、字符型String、整数型Integer、长整型Long、单精度Single、双精度Double等。
变量的赋值方式非常简单,例如“a=2”。
变量的运算也简单,符合一般的运算规则。运算符除了常见的“+-*/”以外,还有乘方“^”、开方“Sqrt(x)”、Log(x)等。这些在科学研究中经常会用到,我将在后续案例中详述。
Debug语句是用于监控计算过程中的某种取值或某种状态,它反馈的结果不会显示在用户界面上,仅用于程序员的调试过程,该语句并非必要。
MsgBox是弹窗功能,用于将某些反馈提示给用户,并等待用户的反馈(例如需要等待用户输入或单击“确定”、“取消”按钮)。
值得注意的是,代码中的Dubug语句执行的结果出现在“立即窗口”,在初次使用VBE编辑器时,该窗口并没出现在编辑器界面。可通过选择菜单“视图→立即窗口”(或按Ctrl+G)显示“立即窗口”。
1.1.4 程序的运行
首先单击窗口编辑器,然后单击播放按钮(或按F5)运行设计的程序。当然,在首次创建并未保存的情况下,会弹出对话框提示我们保存程序,命名为“helloWorld.xlsm”格式,注意要选择“Excel启用宏的工作簿”这个类型。当一个简单的窗体出现时,表明HelloWord程序成功运行了。单击按钮,在“立即窗口”即可出现Dubug语句的输出结果,同时会弹出窗口显示“Hello, world!”。当您看得眼前的这一切时,恭喜你,你的一只脚已踏入Excel VBA编程的大门。
1.1.5 变量申明
在VBA中声明变量时,一般使用Dim语句,后跟变量名称和类型。如果变量需要在未声明的情况下使用,或者如果未指定类型,则将其分配为Variant类型。在模块的第一行使用OptionExplicit语句,强制在使用之前声明所有变量。强烈建议始终使用Option Explicit,因为它有助于防止拼写错误,并确保变量/对象保持其预期的类型。
在前面的案例中,使用Dim a as Integer的格式定义变量的类型。除了这种可读性很强的申明方式外,还有更简单的申明语句:
Dim this$ 'String
Dim this% 'Integer
Dim this& 'Long
Dim this! 'Single
Dim this# 'Double
Dim this@ 'Currency
以上申明语句采用后缀类型符号“$、%、&、!、#、@”分别代表字符串、整数型、长整型、单精度、双精度、货币等类型。虽然这种语法简单,但对于初学者不容易记忆且易混淆,建议对编程有一定基础的情况下使用。
在上述代码中,每一行末尾都有注释语句,用于解释代码或备注重要信息,方便程序员后期调试。在VBA中,可以在代码末尾或上、下空行添加注释,注释语句以单引号“'”开头。
在复杂的科学运算中,除了需要申明不同类型的变量外,还需考虑这些变量的使用范围(例如局部变量、全局变量)和变化与否(静态变量、动态变量)。
当使用Static语句而不是Dim语句时,声明的变量将保留调用时的值。代码如下:
全局变量可以用于项目中的任何过程。如果在模块外声明了全局变量,模块或类模块都可以使用这些全局变量。代码如下: