![]() 下面我们继续编写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: 技巧:先扫描整个文档,逐一分析每个域,该域是通过上面方法所插入的域,既域类型为81则用值取代.如果该域在单元格中,该域并且已经有了值,用户重新填充值时,应该覆盖原值。怎样才能覆盖原值呢?解决的方法是该域的位置作为选择点,选择整个单元格,清除单元格的内容,并重新插入域后,再用值取代。 编写好了所有类,把它生成DLL文件就可。 下面对它进行测试:重新生成一工程,向工程中增加一Module。Module的Code如下: 运行时的界面如下: 打开一Word文件运行后的界面如下: 修改Main的内容,测试填充数据的类: Sub Main() Dim bb AsNew CWriteDataToDocument() bb.DocumentName = "e:将数据库中的信息据填写到文件.doc" bb.FillData() EndSub 运行之可达到所要求的所有功能。 总结:上面方法介绍了Word域的利用,利用VBA编写Word域的方法。Word域所对应的数据库的字段的单值和多值的关系,极有普遍性,很有实用价值。 责任编辑:炒饭 欢迎评论或投稿 |