叮!恭喜您,VBA“新手村”七日游正式毕业!啃了前面7篇基础干货,想必你已经内力大增,是时候下山闯荡江湖,搞点大事情了。软件嘛,总得有个界面,就像咱们大侠出门不能光膀子,得穿件像样的衣服——是时候给你的代码“裁件新衣裳”了!

在VBA里创建界面非常简单,只需要点击VBE主菜单“插入”–>’用户窗体’,一个界面就生成了。

生成的界面在资源管理窗口中的“窗体”下,初始名称叫做“UserForm1”。
我们创建的这个窗体就是一个“对象”,对象的名称就叫做’UserForm1’,你可以在属性窗口里修改这个对象的名称,这个对象的主要属性也列出在属性窗口中。它的属性很多,主要的属性有以下几个:名称(窗口对象的名称,在程序中使用这个对象时所用的变量名),Caption(标题,即窗口左上角显示的标题),Height(高度),Width(宽度)。这里把Caption属性修改成“全栈开发的码农”。

有了UserForm1这个对象后,就可以在模块1中写入代码,先写最简单的1行代码:

Sub main()    UserForm1.Show 0End Sub

这行代码的意思是调用UserForm1这个对象的Show方法,这个方法要求输入一个参数,我们输入一个参数0,这个参数代表窗体的显示模式,这个参数是1的时候,在UserForm1窗体显示时,只能操作这个窗体上的内容,而不能操作其它窗体(包括主程序窗体)中的内容。现在用的参数是0,所以在UserForm1窗体显示时,可以操作其它窗体上的内容。这时候运行main这个子过程,就显示出UserForm1窗体了。

这显示了一个空的界面,里面没有任何内容。下面继续给这个窗体添加具体内容。先在资源管理器中双击窗体UserForm1,然后点击VBE主菜单的“视图”–>’工具箱’调出工具箱。

在弹出的“工具箱”里,有各种各样的图标,每个图标都对应一个“控件”

最常用的控件是“标签”、“文本框”、“按钮”,把这些控件从工具箱里拖放到窗体中去,然后调整它们的位置和大小,这里拖放3个文本框,2个标签和1个按钮到窗体UserForm1中。

VBA零基础教程8:用户界面的设计

再修改一下main子过程里的代码,给UserForm1里的控件属性赋值:

Sub main()    UserForm1.Label1 = '+'    UserForm1.Label2 = '='    UserForm1.CommandButton1.Caption = '确定'    UserForm1.Show 0End Sub

上面的代码意思是,把UserForm1里的Label1控件的显示文本变成“+”号,Label2控件的显示文本变成“=”,按钮CommandButton1的标题(Caption)变成’确定’,前面我们是通过修改属性窗口里的属性来修改Caption的值,现在通过代码来修改,效果是一样的。运行上面的程序,就会显示出一个含有内容的窗体:

我们的本意是要设计一款加法计算器,在文本框里输入数字,然后点击确定按钮就计算出结果。但是现在输入数字后,点击确定没有任何反应。这是因为按钮还没有绑定任何子过程或函数。回到VBE的界面,双击UserForm1窗体,然后再双击CommandButton1控件按钮。这时候VBE就在代码编辑区自动创建了一个子过程CommandButton1_Click(),这个子过程还没有任何代码。

下面要给CommandButton1_Click()子过程添加代码:

Private Sub CommandButton1_Click()    Dim a As Double    Dim b As Double    a = CDbl(TextBox1.Text)    b = CDbl(TextBox2.Text)    TextBox3.Text = CStr(a + b)End Sub

这段代码的意思是先定义2个双精度的小数a和b,分别给a和b赋值,赋的值分别是由文本框里的文本通过CDbl内部函数转成的双精度小数,然后把a和b相加,得到的值再通过Cstr内部函数转成字符串,赋值给文本框TextBox3的Text属性,这样就显示出最终相加的值了。

调试这个程序的时候,不能直接在窗体UserForm1打开的界面运行,而是要双击模块1中,回到main子过程,从这个子过程开始运行。