Word算得上是使用最广泛的应用软件了,但是如果你仅仅用它来打打字、画画表,那就太平淡无奇了,也有些委屈了Word。Word不仅有强大的文字编辑能力,它还内嵌一个VBA(Visual Basic for Applications)编程环境,可以开发出满足个性需求的功能来。
本人利用VBA编写了一个“Word讲笑话”,做出来后颇有成就感,现将开发过程和心得写出来与读者朋友分享。
能实现的功能是:当每次启动Word时将自动运行“Word讲笑话”,能随机的显示一条笑话(当然,笑话得事先录入好并保存在一个文本文件中)。“Word讲笑话”的面板中一共有三个按钮,点击“下一条”可继续阅读其它笑话,点击“关于”可显示作者和帮助信息,点击“关闭”将关闭窗口。面板中还有一个复选框,可以让用户自由决定下次启动Word时是否显示笑话。
开发过程主要有以下几个环节(以Word XP为例):
一、建立窗体
窗体是窗口和对话框的统称,它是Windows应用程序的用户界面的基础部分。窗体是控件的容器,用来放置文本框、命令按钮、复选框等各种控件。
1、启动Word,单击菜单“工具→宏→Visual Basic编辑器”,也可以按快捷键[Alt+F11],切换到Visual Basic编辑器窗口。
2、单击菜单“插入→用户窗体”,系统建立一个默认样式的用户窗体。对窗体可拖动其右、下边的小方框来可改变大小,本例中根据功能需要将窗体拖为扁长形状。
3、单击菜单“视图→属性窗口”,在属性窗口中修改窗体的几个主要属性值。在属性列表中选定“名称”属性,输入“Xiaohua”,然后选定“Caption”属性,输入“Word讲笑话”。现在,我们便能看到一个标题为“Word讲笑话”的窗体了。
小提示:窗体中的点状物称为“网格”,它能在建立控件时起位置参考和智能对齐的作用,单击菜单“工具→选项”,选择“通用”选项卡,可修改网格的选项和网格块的大小,建议使用较小的网格设置,这样能使控件更靠近窗体边缘的位置,以达到美观的效果。
二、建立控件
建立了窗体就相当于打好了地基,下一步的工作就是“添砖加瓦”了,也就是建立控件。常用控件包括文本框、命令按钮、标签、复选框、滚动条等。建立控件的方法很简单,单击菜单“视图→工具箱”调出工具箱,在“工具箱”中选择控件类型,然后在窗体上单击或拖动即可。
1、创建文本框:在“工具箱”中选择“AB|”样式的按钮,在窗体上拖动建立一个文本框,并用鼠标调整其位置、大小,若需精确调整,也可在属性窗口中调整“Height”、“Width”等属性值。很关键的一点是要将“MultiLine”属性值设为“True”,它的作用是使文本框能显示多行文本。
2、创建命令按钮:在“工具箱”中选择命令按钮(鼠标悬停会显示“命令按钮”字样),在窗体上的文本框右边拖动建立一个命令按钮,调整好大小并修改其“Caption”属性值为“下一条”,接着依次建立“关闭”、“关于”按钮。
3、创建复选框:在“工具箱”中选择复选框按钮,在窗体上的文本框下方单击鼠标左键,便创建了一个复选框,修改其“Caption”属性值为“下次启动时不显示”。
4、创建标签:可在窗体的空余部分以“标签”的形式显示作者等信息。
小提示:为了使窗体、控件看起来更美观、协调,可以使用“格式”菜单下的“统一尺寸”命令项使按钮大小相同,使用“对齐”、“水平间距”、“垂直间距”等命令项,使各控件均匀、合理的布置在窗体中。
三、编写代码
上面建立的窗体和控件还只是“徒有其表”,因为还没有为各个控件赋予具体的功能,接下来就需要编写VBA代码 ,通过代码告诉各控件在什么情况下该执行什么任务。编写代码的方法是:单击菜单“视图→代码”或按F7键,即切换到代码窗口,可在代码窗口的声明部分(顶端空白区域)开始录入代码。
首先要编写的是公用Sub过程的代码,Sub过程是一系列由Sub和End Sub语句包含起来的 VBA 语句。以下两个Sub过程分别实现显示笑话和关闭窗体的功能。代码如下:
Sub 显示笑话()
Dim line$(500) ’定义笑话文件的最大行数
Open "c:xiaohua.dat" For Input As #1 ’打开笑话文件
Do While Not EOF(1)
N = N + 1
Input #1, line$(N) ’读入笑话内容到变量
Loop
Close #1
Randomize
num = Int(N * Rnd + 1) ’产生随机数
Do While line$(num) = "" ’识别并忽略空行
num = num + 1
If num = N + 1 Then num = 1
Loop
TextBox1.Text = line$(num) ’显示笑话内容
End Sub
Sub 结束()
Open "c:xiaohua.ddd" For Output As #1
If CheckBox1.Value = True Then ’结束前检查是否选中复选框
Print #1, "no" ’若选中则写入判断因子“no”
Else: Print #1, "yes" ’未选中则写入判断因子“yes”
End If
Close #1
End ’关闭窗体
End Sub
小提示:
1、上面的笑话文件c:xiaohua.dat是一个纯文本文件,需事先用记事本录入保存,在录入或维护时要求每条笑话独占一行(不回车换行),两条笑话之间可插入一个或多个空行,笑话文件的总行数不能超过定义的最大行数。
2、文件c:xiaohua.ddd也是一个纯文本文件,其作用是被用来放置判断因子,后续步骤中的宏代码将根据此文件中的判断因子来决定是否在启动Word时显示笑话。此文件不需手工建立,由程序自动生成。
接下来要编写进入、离开窗体时、单击“下一条”、“关闭”等按钮时的事件过程,当发生事件时将调用公用的Sub过程来执行功能。代码如下:
Private Sub UserForm_Activate() ’运行窗体时显示笑话
End Sub
Private Sub CommandButton1_Click() ’单击“下一页”按钮时显示笑话
End Sub
Private Sub CommandButton2_Click() ’单击“关闭”按钮时结束
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
’通过其它途径关闭窗体时结束
End Sub
小提示:这一部分代码可以紧接第一部代分码连续录入,也可在代码窗口的“对象框”、“过程/事件框”中分别选择对象和事件,然后在自动给出的Private Sub…与Sub之间输入要调用的Sub过程名,这样减轻了录入量,并减少了出错的可能性。
四、完善功能
完成上面三步便初具规模了,窗体已经能够运行,但复选框的作用还不能发挥出来。接下来通过创建宏来完善窗体功能。
创建宏的方法是:单击菜单“工具→宏”,在“宏名”文本框中输入宏名“Autoexec”,接着单击“创建”,录入完成以下代码:
Sub Autoexec()
On Error GoTo err ’出错处理
Open "c:xiaohua.ddd" For Input As #1
Input #1, Ask$ ’读取判断因子
Close #1
If Ask$ = "yes" Then xiaohua.Show
’若判断因子为yes则运行xiaohua窗体
err:
End Sub
Sub笑话()
xiaohua.Show ’xiaohua为第一步中建立的窗体名称
End Sub
录入完毕后关闭Visual Basic窗口返回到Word。以上代码创建两个宏,Autoexec宏是一个自动宏,它在Word启动时自动运行,并根据读取的判断因子来决定是否运行窗体。名为“笑话”的宏则无条件运行xiaohua窗体,为了能方便的运行这个宏,我们可把它添加为菜单命令,方法是:单击“工具→自定义”,选择“命令”选项卡,在“类别”框中找到“宏”,将右边的“命令”框中“Normal.NewMacros.笑话”拖入菜单“工具”中,并对拖入的命令点右键,在“命名”文本框中重命名为“Word讲笑话”。
至此,全部工作完成。当Word启动时就能看到笑话了,平时要阅读笑话时,单击菜单“工具→Word讲笑话”即可。若选中了“下次启动时不显示”复选框,以后也可随时使用它的菜单命令来恢复显示。
小提示:不知你发现没有,上面做出来的这个小东东,和很多软件的“每次一贴”、“日积月累”非常的相似,而独到之处是可以自己决定要显示的内容,如果你还想看些名人名言来提高自己的修养,或者想多学些电脑小技巧,不妨把这些内容组织进去,用它来做最具有个性化的“日积月累”妙妙贴。