在程序中利用VBA编写控制Word域的功能(二)

ZDNet软件频道 时间:2002-08-28 作者:黎宇 |  我要评论()
本文关键词:liyu
本文介绍了Word域的利用,利用VBA编写Word域的方法。Word域所对应的数据库的字段的单值和多值的关系,极有普遍性,很有实用价值。
点击进入作者专区 域是Word最具有实用价值的功能之一,它表示文档中可能发生变化的数据或邮件合并文档中套用信函、标签中的占位符。Microsoft Word 可以在您使用一些特定命令时插入域,如“插入”菜单上的“日期和时间”命令。您也可使用“插入”菜单上的“域”命令手动插入域。


下面我们继续编写CSetDocField类的内容。

CSetDocField类应该提供单值域和多值的域名,所以我们把它们定义为CSetDocField类的属性,并提供一运行上面窗口的方法。这里我们要利用一些技巧,在定义类并向类属性赋性值后,事实赋性值是保存在所定义的实类中,该实类一旦消失,值也随着消失。如何不通过该实类取得类的属性?这是困扰许多开发人员的问题。我的解决方法是申请与类属性对应的全局变量。向类属性的同时,把值保存在对应的全局变量中,取值时取出对应的全局变量的值就可。

这里我们选增加一Module,其Code如下:

Public gSavePath AsString

Public gFieldColl As Collection

Public gTableColl As Collection

Sub Main()

    Form1.Show(1)

EndSub

下面我利用全局变量当作类属性使用的技巧:

CSetDocField类的Code:List1

这里,我们把插入域的类编写好了,只要在VB6的文件菜单中执行生成该类的文件就可生成DLL文件。

下面编写将值填写到文件中域对应的位置的类

在VbaWord工程中增加新类CWriteDataToDocument。

类CWriteDataToDocument由调用者提供所处理的文件模板,所以它应该有一文档属性DocumentName,打开DocumentName文件,向DocumentName文件中插入单值和多值。插入多值时要判断是否增加单元格。如果对应的值多于所提供的表格行数,则要增加行。下面是它的完整Code:

list2

技巧:先扫描整个文档,逐一分析每个域,该域是通过上面方法所插入的域,既域类型为81则用值取代.如果该域在单元格中,该域并且已经有了值,用户重新填充值时,应该覆盖原值。怎样才能覆盖原值呢?解决的方法是该域的位置作为选择点,选择整个单元格,清除单元格的内容,并重新插入域后,再用值取代。

List3

编写好了所有类,把它生成DLL文件就可。

下面对它进行测试:

重新生成一工程,向工程中增加一Module。Module的Code如下:

list4

运行时的界面如下:

点击放大

打开一Word文件运行后的界面如下:

点击放大

修改Main的内容,测试填充数据的类:

Sub Main()

    Dim bb AsNew CWriteDataToDocument()

    bb.DocumentName = "e:将数据库中的信息据填写到文件.doc"

    bb.FillData()

EndSub

运行之可达到所要求的所有功能。

总结:上面方法介绍了Word域的利用,利用VBA编写Word域的方法。Word域所对应的数据库的字段的单值和多值的关系,极有普遍性,很有实用价值。


责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134