VBA实用开发指南(3)
四、VBA综合开发实例温馨贺卡向导
(一)例程分解
本例程是一个简单的贺卡向导,可直接运行并可辅助生成简单的贺卡。程序主界面与Word的标准向导程序类似,单击"上一步"和"下一步"按钮或直接单击窗体左侧的切换按钮均可直接跳转至相应步骤。单击"取消"按钮将关闭向导窗体,如图4所示。
单击"下一步"按钮切换至下一页,在该页面中可选择贺卡的节日并输入发送者和接受者的姓名,如图5所示。
单击"下一步"按钮切换至下一页,在该页面中可输入贺词,如图6所示。
单击"下一步"按钮切换至向导程序的末一页,单击"完成"按钮即可生成文档。生成的文档将包含将用户在前述步骤中填写的信息,生成一份简单的贺卡。
(二)程序知识点
1.向导的编制原理
向导程序的本质即前述的Word模板文件(DOT文件),唯一区别在于其扩展名为"WIZ",因此编制向导程序首先需编制模板并调试代码,在调试无误后将扩展名改为"WIZ"即可。向导编制的常规步骤如下所述:
(1)创建向导所需的自动图文集:向导所需的自动图文集是包含书签的自动图文集,最后生成文档时即调用了预保存的图文集,而在Word中用于定位的书签对象,可在需填写输入内容的位置上帮助程序实现定位并替换。该步骤是编制向导程序的关键。
(2)编辑窗体和模块:向导程序需通过窗体来实现交互功能,因此通过合理运用控件,完全可设计出美观易用的窗体,然后对窗体的控件进行事件编程,实现流程控制。窗体设计完毕后,需通过模块来保存通用的功能,常用的功能包含生成文档、替换书签和删除书签等。
(3)设置向导程序入口:向导程序需通过特定的事件来触发,建议在"ThisDocument"对象的"New"事件中输入调用向导程序入口的代码。Document对象的事件包括New事件(在创建基于模板的文档时触发。按功能分析,向导程序入口即通过该事件执行)、Open 事件(在打开文档时触发)和Close事件(在关闭文档时触发)。
2.界面设计知识点
(1)向导程序需逐步引导用户,因此建议使用多页控件(MultiPage)实现界面切换。
(2)VBA的窗体设计中未提供类似VB的控件数组功能,因此需访问Controls集合对象来控制一些外观和功能均类似的控件。
(3)由于从前述知识点可得向导程序本质为模板文件,因此开发者可直接打开Word已提供的向导程序(如"实用文体向导"等),然后通过工程资源管理器导出其界面窗体,然后在此基础上进行参考和修改,可大大提高编制的效率。
(4)Controls集合:窗体的Controls集合代表其包含的全部控件。Controls集合中的每个控件均有唯一的索引,也可通过控件名称来引用。在向导程序中,为有效地控制功能和外观均类似的控件(如切换按钮),可通过名称引用来枚举访问窗体的Controls集合,即可控制这些控件。
(5)多页控件:多页控件(MultiPage)是Pages集合的容器,每个多页控件均包含一个或多个Page对象,其常用属性和方法如下:
Value属性:为多页控件默认属性,返回当前活动页面的索引号,从"0"开始编号,依此类推。
Style属性:用于设置多页控件标签的显示风格,在向导中建议设置为"2"(即不显示表头)。
(6)Page对象:该对象代表多页控件的页面。每个 Page对象均可放置不同的控件,以实现多界面切换的效果,第一个Page对象默认名称为"Page1",其常用属性和方法如下:
Picture属性:用于设置页面的背景图片。
PictureTiling属性:用于设置是否平铺图片。
PictureSizeMode属性:用于设置显示背景图片的方式。
(三)程序实现步骤
1.创建向导所需的自动图文集
通过前述内容可得创建向导所需的自动图文集是关键的步骤,因此首先在编辑界面中输入相关的文字,然后在需插入内容的位置添加书签,最后选择全部内容,以"hk"命名并保存于模板的自动图文集中。如图7所示:
2.编制窗体
在VBA编辑器的工程资源管理器中添加窗体,放置多页控件、标签、文本框、列表框等控件(也可采用前述的导入并修改的方法来设计窗体),由于该窗体使用的控件较多,限于篇幅,不在逐一介绍,可按效果图自行设计,本文仅对一些需在代码中使用的控件进行介绍。
首先切换至多页控件的第二页,该页面中需编程的控件位置和名称如图8所示:
如图8所示,其中"frmHKWiz"为用户窗体,"Page1"为多页控件的页面对象,"txtfsz"和"txtjsz"均为文本框控件,"shpMap0"至"shpMap3"、"lblMap0"至"lblMap3"均为Label控件,"lstjr"为列表框控件。切换至多页控件的第三页,该页面中需编程的控件位置和名称如图9所示:
如图9所示,其中"Page2"为多页控件的页面对象,"shpChartPath"为标签控件,"txthc"为文本框控件,"cmdCancel"、"cmdBack"、"cmdNext"和"cmdFinish"均为命令按钮控件。
窗体界面设计完毕后,切换至代码编辑窗口,首先输入常量声明,代码如下所示:
'代表页面数量
Const P_Count = "3"
'标签名称的常量
Const Const_LBL = "lblMap"
'标签名称的常量
Const Const_SHP = "shpMap"
然后输入公共变量,代码如下所示:
'用于保存当前页面编号的变量
Dim indexPanel As Integer
输入自定义的过程代码,如下所示:
'初始化控件的过程
Private Sub init_Controls()
With lstjr
.AddItem "圣诞节"
.AddItem "中秋节"
.AddItem "国庆节"
End With
End Sub
'切换页面的过程
Private Sub changepage(iNewPanel As Integer)
If indexPanel = iNewPanel Or fWizardCallBack Then
Exit Sub
End If
'通过Controls集合对象来实现页面切换效果
frmHKWiz.Controls(Const_SHP & indexPanel).BackColor = vbWhite
frmHKWiz.Controls(Const_LBL & indexPanel).FONTBOLD = False
indexPanel = iNewPanel
frmHKWiz.Controls(Const_SHP & indexPanel).BackColor = vbGreen
frmHKWiz.Controls(Const_LBL & indexPanel).FONTBOLD = True
mpgWizardPage.Value = indexPanel
End Sub
最后输入各控件的事件代码,如下所示:
'用于模拟切换按钮的标签单击事件
Private Sub lblMap0_Click()
changepage (0)
End Sub
Private Sub lblMap1_Click()
changepage (1)
End Sub
Private Sub lblMap2_Click()
changepage (2)
End Sub
Private Sub lblMap3_Click()
changepage (3)
End Sub
Private Sub shpMap0_Click()
changepage (0)
End Sub
Private Sub shpMap1_Click()
changepage (1)
End Sub
Private Sub shpMap2_Click()
changepage (2)
End Sub
Private Sub shpMap3_Click()
changepage (3)
End Sub
Private Sub shpMap4_Click()
changepage (4)
End Sub
'"上一步"按钮单击事件
Private Sub cmdBack_Click()
If indexPanel > 0 Then
changepage (indexPanel - 1)
End If
End Sub
'"下一步"按钮单击事件
Private Sub cmdNext_Click()
If indexPanel < P_Count Then
changepage (indexPanel + 1)
End If
End Sub
'"取消"按钮单击事件
Private Sub cmdCancel_Click()
'关闭窗体
Unload Me
End Sub
'"完成"按钮单击事件
Private Sub cmdFinish_Click()
Application.ScreenUpdating = False
'调用模块中创建文档的过程,即窗体和模块的接口过程
CreateNewDoc (True)
End Sub
'窗体初始化事件
Private Sub UserForm_Initialize()
indexPanel = 0
mpgWizardPage.Value = 0
changepage (0)
init_Controls
End Sub
3.编制模块
模块用于保存向导程序中公用的代码,在工程资源管理器中添加标准模块,命名为"Common",然后输入代码(也可模仿窗体的导入操作,将Word提供的向导程序包含的模块导入,参考并使用其中的很多过程),如下所示:
'启动向导,即向导程序的入口
Public Sub StartWizard()
'显示窗体
frmHKWiz.Show
End Sub
'创建新文档的过程,通过"fDummy"参数可使该Public类型的过程不在Word的"宏"列表中出现。
Public Sub CreateNewDoc(fDummy As Boolean)
Application.ScreenUpdating = False
'设置鼠标为"等待"形状
System.Cursor = wdCursorWait
'获取向导程序的模板
Set objWizTemplate = ActiveDocument.AttachedTemplate
Application.DisplayAutoCompleteTips = True
'插入已创建的自动图文集
ActiveDocument.AttachedTemplate.AutoTextEntries("hk").Insert Selection.Range, True
ActiveDocument.Select
'调用替换书签的过程,将窗体中输入的内容在文档中进行替换
ReplaceBookmark "jr", frmHKWiz.lstjr.Text
ReplaceBookmark "fsz", frmHKWiz.txtfsz.Text
ReplaceBookmark "jsz", frmHKWiz.txtjsz.Text
ReplaceBookmark "hc", frmHKWiz.txthc.Text
'设置新文档的属性
With ActiveDocument
.SpellingChecked = True
.GrammarChecked = True
.UndoClear
End With
Application.DisplayAutoCompleteTips = True
Selection.HomeKey wdStory
'恢复默认鼠标形状
System.Cursor = wdCursorNormal
Application.ScreenUpdating = True
'关闭窗体
Unload frmHKWiz
'调用删除所有书签的过程
deleteallbookmark
End Sub
'替换书签内容的过程
Private Sub ReplaceBookmark(which As String, what As String)
If Len(what) = 0 Then
what = ""
End If
'选择指定的书签
Selection.GoTo what:=wdGoToBookmark, Name:=which
'替换内容
Selection.TypeText what
End Sub
'删除所有书签的过程
Private Sub deleteallbookmark()
Dim bm As Bookmark
'遍历所有的书签
For Each bm In ActiveDocument.Bookmarks
'删除书签
bm.Delete
Next
End Sub
4.设置向导入口
代码编写完毕后,在工程资源管理器中切换至"ThisDocument"对象,输入事件代码,如下所示:
Private Sub Document_New()
'调用模块(Common)中启动向导的过程
Common.StartWizard
End Sub
5.后续工作
向导程序编制、调试无误后,可将其扩展名改为"WIZ",然后搜索"Normal.dot"文件所在的文件夹,并将该向导程序放置于该目录,随后启动Word XP后即可在"模板"窗体的"常用"栏中显示该向导的图标。
VBA实用开发指南(3)相关推荐
- extjs 实用开发指南_如何提出有效问题:针对开发人员的实用指南
extjs 实用开发指南 Learning is a journey that never ends. At every point in your career, you will keep lea ...
- web开发指南_成为专业Web开发人员的实用指南
web开发指南 This article is meant to serve as a practical guide to becoming a professional web developer ...
- AutoCAD 开发文档,AutoLISP 教程,.Net AutoCAD开发教程,VB AutoCAD开发教程,ObjectARX 开发指南,VBA AutoCAD开发教程,ActiveX 开发指南
AutoCAD 开发文档, CAD开发者社区 - AutoCAD二次开发文档,CAD二次开发,CAD插件开发,中文CAD文档 - 中文CAD开发文档,CAD二次开发问题交流,优秀插件分享 AutoLI ...
- java 高德地图错误码_错误码对照表-实用工具-开发指南-Android 地图SDK | 高德地图API...
新版响应码状态描述问题排查策略 1000请求正常服务调用正常,有结果返回 1001开发者签名未通过1.开发者在Key控制台中,开启了"数字签名"功能,但没有按照指定算法生成&quo ...
- Linux 汇编语言开发指南
Linux 汇编语言开发指南 肖文鹏 (xiaowp@263.net), 北京理工大学计算机系硕士研究生 本文作者 肖文鹏是北京理工大学计算机系的一名硕士研究生,主要从事操作系统和分布式计算环境的研究 ...
- Quartz.net官方开发指南 第十课: 配置、资源使用以及SchedulerFactory
Quartz以模块方式构架,因此,要使它运行,几个组件必须很好的咬合在一起.幸运的是,已经有了一些现存的助手可以完成这些工作. 在Quartz进行工作之前需要被配置的组件主要有: • ThreadPo ...
- JFreeChart 1.0.6 用户开发指南(中文)
JFreeChart 1.0.6 用户开发指南(中文) 草稿(0.9.0) 2007-10-25 2000-2007, Object Refinery Limited. All rights rese ...
- 《Access 2007开发指南(修订版)》一一1.5 什么是数据库对象
本节书摘来自异步社区出版社<Access 2007开发指南(修订版)>一书中的第1章,第1.5节,作者: [美]Alison Balter,更多章节内容可以访问云栖社区"异步社区 ...
- 开发指南专题九:JEECG微云快速开发平台-表单校验组件ValidForm
开发指南专题九:JEECG微云快速开发平台表单校验组件ValidForm 10.表单校验组件ValidForm 10.1使用入门 1.引入css 请查看下载文件中的style.css,把里面Valid ...
最新文章
- mysql之ALTER COLUMN、CHANGE COLUMN、MODIFY COLUMN的区别
- 解决PyCharm中报出 “Instance attribute xxx defined outside __init__“ 的警告
- softmax简单模型处理Mnist分类问题
- hdu 1536(博弈)
- “630”落幕 光伏何去何从?
- 数电/数字电子技术基础全面知识点及习题总结(看这一篇就够了!!!)
- Allwinner Tina Linux 如何打开ssh远程登录支持
- Google网络硬盘(GDrive):千呼万唤不出来
- 电子计算机与多谋种,2011—2012学年度第一学期七年级上册语文期末测试AB卷(2套)(含答案)...
- 100本最棒的web前端图书推荐
- 树莓派-4-温度CPU内存硬盘状态信息
- 规划求解 python_使用Python/PuLp解决线性规划问题
- python BeautifulSoup的使用
- Definition of Spline Basis Function
- html版心怎么设置,怎样设置Word版心啊?
- 如何使用jqdata获取上市公司自由现金流
- 完整议程 | 2022 XDR网络安全运营新理念峰会
- 【算法】十进制转换成二十六进制
- X86系列CPU标准寄存器
- numeric转换varchar_SQL怎么样把numeric类型的数据转换为varchar类型的数据
热门文章
- linux电脑恢复出厂设置密码,linux服务器恢复出厂设置
- Python3 ssl not available问题彻底解决
- 优秀课件笔记之WORD2003文字处理系统
- 迅为IMX6开发板适用于HMI|车载电脑|工业控制|医疗仪器|智能家居 灵活进行产品开发平台...
- 关于装饰模式的一个小例子
- 面试通过,背调凉了?
- 联想拯救者Y7000亮度调低后屏幕黑屏
- vue与单页面 使用Photo Sphere Viewer创建vr 360全景示例代码
- 360月影写给想成为前端工程师的同学
- Contest-51-直播获奖