粉丝服务

第一章 开始学Excel VBA

导读:谭编准备撰写一本新书《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

第一步:打开Excel的工作簿
第二步:开启Excel的开发工具菜单
在Excel软件选择菜单“文件→选项→自定义功能区”,选择“开发工具”复选框,确定。
Excel的菜单“开发工具”标签中,点击“查看代码”或“Visual Basic”即可打开Visual Basice Editor (VBE编辑器),也可以按Alt+F11打开VBE。

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

对Example()子模块中的代码解释如下:
(1)代码缩进

为了提高代码的可读性,通常选将模块中的代码按其逻辑关系进行不同级别的缩进。

(2)变量申明

Dim 用于申明变量及类型,可以将多个变量的申明写在一行代码中,用英文逗号分隔。常用的数据类型:布尔型Boolean(True或False)、字符型String、整数型Integer、长整型Long、单精度Single、双精度Double等。

(3)变量赋值

变量的赋值方式非常简单,例如“a=2”。

(4)变量运算

变量的运算也简单,符合一般的运算规则。运算符除了常见的“+-*/”以外,还有乘方“^”、开方“Sqrt(x)”、Log(x)等。这些在科学研究中经常会用到,我将在后续案例中详述。

(5)调试监控

Debug语句是用于监控计算过程中的某种取值或某种状态,它反馈的结果不会显示在用户界面上,仅用于程序员的调试过程,该语句并非必要。

(6)反馈弹窗

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中,可以在代码末尾或上、下空行添加注释,注释语句以单引号“\'”开头。

在复杂的科学运算中,除了需要申明不同类型的变量外,还需考虑这些变量的使用范围(例如局部变量、全局变量)和变化与否(静态变量、动态变量)。

(1)静态变量

当使用Static语句而不是Dim语句时,声明的变量将保留调用时的值。代码如下:

Static x as Integer
(2)全局变量

全局变量可以用于项目中的任何过程。如果在模块外声明了全局变量,模块或类模块都可以使用这些全局变量。代码如下:

Public CounterVariable as Integer
(3)局部变量
局部变量只能由同一模块中的过程使用。代码如下:
Private CounterVariable as Integer

来源和更多信息:
(1)MSDN-Declaring Variables
https://learn.microsoft.com/zh-cn/office/vba/Language/Concepts/Getting-Started/declaring-variables
(2)Type Characters (Visual Basic)
https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/type-characters
       

本栏目精选

热门推荐

频道导航