Excel VBA语法与应用手册
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.4 编写第一个VBA程序

为了更好地了解VBA程序编写、运行及调试,本节用一个实例介绍了简单VBA程序从窗体设计到最后运行的过程。本节的程序将使用到窗体和模块,并为该窗体和控件进行属性设置,最终通过代码来完成指定的功能,以此来了解VBE各个组成部分的使用方法。

2.4.1 添加窗体和模块

用户编写的VBA程序通常会包含窗体和模块。添加窗体和模块都可以通过工程资源管理器中插入,或者是单击工具栏上的插入窗体和模块按钮来完成。

例2-07:新建一个工作簿,为程序添加一个窗体。

添加新窗体的操作步骤如下。

(1)打开“开发工具”选项卡,执行“代码”组内的“Visual Basic”命令,完成进入VBE编辑器。

(2)在工程资源管理器的空白处单击右键,在弹出的快捷菜单中执行“插入”中的“用户窗体”命令,完成插入窗体的操作。插入的窗体如图2-32所示。

图2-32 空白窗体

默认的空白窗体的名称是“UserForm1”,该窗体和用户所看到的通常的应用程序窗口并不完全一致,该窗体只有一个关闭按钮,因此实际上VBA的窗体只是一个对话框。

空白的窗体好比是空白的画布,画布的大小和画布上的内容是用户可以选择的,因此用户接下来的任务就是要在窗体中添加控件,调整窗体大小,调整窗体属性使之最后符合使用者的要求。

1. 调整窗体的大小

窗体的大小既要能够容纳使用者所放置的控件,又要长宽比例协调,调整窗体的大小一般有两种方式:

● 选中窗体,在窗体边框上会出现一些小的正方形,鼠标移动到这些正方形上,鼠标的形状变成了箭头,此时按住鼠标左键不放,拖动即可调整窗体大小。

● 在“属性窗口”中如图2-33所示,从对象下拉列表中选择“UserForm1”,更改Width(窗体宽度)和Height(窗体高度)的值,按Enter键确认即可调整窗体的大小。

图2-33 属性窗口

说明

相对来说选中窗体直接拖动的方法更加简单,这种方法类似于很多应用程序中的拖动以调整对象大小的操作方法。第2种方法在属性窗口中修改属性值,会使得窗口的大小更加精确。

2. 添加控件

空白的窗体中并没有任何的东西,此时可以为该窗体添加一个控件。

例2-08:在上例添加的窗体内放置两个命令按钮控件。

添加控件的方法具体步骤如下。

(1)如果没有显示“工具箱”,可以单击VBE编辑器的“视图菜单”按钮,执行其中的“工具箱”命令,弹出工具箱;或者单击工具栏上的工具箱按钮,弹出工具箱。工具箱的外观如图2-34所示。

图2-34 工具箱

(2)单击工具箱中的CommandButton控件按钮,将鼠标移动到窗体内,按鼠标左键不放,拖拉出一个CommandButton按钮。

(3)单击工具箱中的CommandButton控件按钮,然后在窗体中单击鼠标左键,就能放置一个标准大小的CommandButton按钮。

说明

两种方法的区别是前者可以拖出一个任意大小的控件,而后者只能产生一个固定大小的控件。

3. 设置属性

为了使添加的窗体和控件符合程序的要求,需要为窗体和控件设置属性值。设置属性值是在“属性窗口”完成的。

例2-09:为窗体和控件设置属性,其中窗体的名称更改为uf1,标题Caption属性更改为“测试窗口”。将窗体上放置的CommandButton1的名称更改为cmdtest,标题Caption属性值更改为“测试”,将窗体上放置的CommandButton2的名称更改为cmdQuit,标题属性值更改为“退出”。

在属性窗口为窗体设置属性值的方法如下。

(1)在属性窗口的对象选择下拉列表框中选中userform1对象,完成选择要设置属性值的对象。

(2)在属性窗口中,将Caption属性后的值由“UserForm1”更改为“测试窗口”,如图2-35所示,完成窗体Caption属性的设置。

图2-35 设置窗体的Caption属性值

(3)在属性窗口中,将其“名称”属性后的值由“UserForm1”更改为uf1,完成窗体Name属性的设置。

注意

在属性窗口中Name属性用了汉字“(名称)”表示。

设置完窗体的属性值后还需要为窗体中添加的两个命令按钮设置属性,其方法如下。

(1)在属性窗口的对象选择下拉列表框中选中CommandButton1,完成选择要设置属性值的对象。

(2)在属性窗口中,将其Caption属性后的值由“CommandButton1”更改为“测试”,如图2-36所示完成窗体CommandButton1的Caption属性设置。

图2-36 设置命令按钮的Caption值

(3)在属性窗口中,将其“名称”属性后的值由“CommandButton1”更改为cmdtest,完成控件Name属性的设置。

(4)在属性窗口的对象选择下拉列表框中选中CommandButton2对象,将其Caption属性后的值由“CommandButton2”更改为“退出”,完成窗体CommandButton2的Caption属性设置。在属性窗口中,将其“名称”属性后的值由“CommandButton2”更改为cmdQuit,完成控件Name属性的设置。

设置完成后的窗体如图2-37所示。

图2-37 完成后的窗体

注意

Caption属性和Name属性是有区别的。Name属性是一个控件或者窗体的名称,相当于一个人的名字,今后使用者可以通过这个名称引用到该控件,在同一个窗体中,不能有Name完全相同的控件。而Caption属性则是控件或者窗体的标题属性,相当于一个人的绰号,在不同的时候可以有不同的绰号,它只是起到了外在的提示性的作用。例如在上述设置中将窗体的Caption属性设置为“测试窗口”,那么就让使用者了解到该窗体的用途是什么。一般来说控件的Name属性用英文来表示,而Caption则可以用中文来表示。

4. 添加模块

在工程资源管理器中右击,在弹出的快捷菜单中执行“插入”中的“模块”命令,添加一个新模块。为了标示指定模块的作用,可以在属性窗口将模块重命名。

例2-10:承接上例,为工程添加一个模块,并将模块重命名为“退出窗体部分”,具体操作方法如下。

(1)在工程资源管理器中选中“模块1”,完成模块对象的选择。

(2)在属性窗口中,将模块“名称”属性值由“模块1”更改为“退出窗体部分”,如图2-38所示,完成模块名称的设置。

图2-38 更改模块名称

说明

当一个VBA程序中存在很多模块的时候,对模块进行重命名有助于了解不同模块的作用。将不同的过程代码放置在不同的程序中,也显得更有条理。

2.4.2 制作第一个程序

在设计好的窗体中,要达到的效果就是单击“测试”按钮,弹出一个简单的消息框,该消息框提示信息为“HelloWorld”,单击“退出”按钮,则退出程序。这种针对某个动作而做出的反应过程就是事件。这里包括了两个单击事件。

1. 完成“测试”按钮代码

代码的输入需要在代码窗口进行输入,双击窗体中的“测试”按钮,即可打开代码窗口,在代码窗口中显示代码如下。

    Private Sub cmdtest_Click()

    End Sub

这段代码的含义表示的是这件事情的开头和结尾,事件的开始和结束VBA已经帮用户书写完毕。“Private Sub cmdtest_Click()”表示按钮接收了一个动作,是动作的开始,中间的空白地方就表示接收到动作后会发生的事情,而“End Sub”表示这件事情的结束。“测试”的完整代码如下所示:

    Private Sub cmdtest_Click()
        MsgBox "Hello World!", vbInformation + vbOKCancel, "按钮测试"
    End Sub

在代码窗口中显示的情况如图2-39所示

图2-39 代码窗口中的内容

说明

Msgbox的作用就是产生一个消息框,初学者不用深入了解该函数的用法,只需要按照输入上述的内容即可。有关该函数的应用将在后面的章节中予以介绍。

2. 运行程序

通过上述步骤已经为“测试”按钮提供了弹出消息框的功能,运行这个简单程序的方法有如下几种。

(1)将光标移动到上述的过程内,单击工具栏上的运行按钮,即可显示窗体,单击窗体上的“测试”按钮,可以打开如图2-40所示的消息框。

图2-40 消息框

(2)单击消息框的“取消”按钮,单击窗体的关闭按钮,返回VBE编辑器。

(3)在工程资源管理器中,双击名为“uf1”的窗体对象,然后单击工具栏上的运行按钮,即可将窗体显示在工作窗口上。单击窗体上的单击“测试”按钮,显示上图所示的内容。

3. 完成模块代码

在工程资源管理器中,双击名为“退出窗体部分”模块对象,打开代码窗口,在代码窗口中输入如下内容。

    Sub退出()
        Unload uf1
    End Sub

在模块中输入代码如图2-41所示。

图2-41 模块中的代码

和输入事件内容不同,在模块中输入代码所有的内容都必须由用户自行输入。

说明

Unload uf1的含义就是关闭名为uf1的窗体。

4. 完成“退出”代码

在模块中虽然输入了关闭窗体的代码,但是并不会因为窗体中的按钮名为“退出”就自动执行模块中的代码,模块中的功能要在何时实现,需要用户自行指定。单击窗体中的“退出”按钮即可退出窗体,其操作方法如下。

在工程资源管理器中,双击名为“uf1”的窗体对象,在窗体中双击“退出”按钮,进入代码窗口,将代码窗口中的代码更改如下。

    Private Sub cmdQuit_Click()
        Call退出
    End Sub

说明

上述代码表示单击“退出”按钮的时候,就调用模块对象中的“退出”过程所定义的功能。

在工程资源管理器中,双击名为“uf1”的窗体对象,然后单击工具栏上的运行按钮,即可将窗体显示在工作窗口上,单击窗体上的单击“测试”按钮,即可显示一个消息框,单击退出按钮,将会关闭用户定义的窗体。