关于从ACCESS中向WORD填写数据的问题的说明
一、问题来源:http://www.office-cn.net/bbs/dispbbs.asp?boardID=2&ID=17414&page=1 解决的方法见上面附件。 二、解决问题的几个关键: 1.怎样在WORD空表格里填写内容; 2.填写的步骤; 3.关于主/子窗体的问题。 三、解决办法: 1.怎样在WORD空表格里填写内容: ACCESS向WORD表格中填写数据需要使用TABLE对象, Doc.Documents("模板.doc").Tables(1).Cell(Row:=2, Column:=1).Range.Text = "2" 表示在文件“模板.doc”的第1个表格的第2行第1列的格子内写上“2”。如果是第2个那就是“Tables(2)”。所以在程序里用了一个变量“intTabCount”表示现在是填写哪个表格,每当K可以被15整除(K Mod 15 = 0)时,intTabCount就会增加1。 2.填写的步骤: 如果看原来的问题,当程序执行完毕之后,正好是页面上需要重复的部分已经填写完毕。把现在的情况复制下来,当需要增加页时,在页面最下插入分页符然后粘贴上复制的内容则正好。 这一部分的代码我是在WORD中用录制宏的方法记录下来的。原来的录制宏代码如下: Sub Macro1()
'
' Macro1 Macro
' 宏在 2004-8-15 由 刘小军 录制
'
Selection.WholeStory '全选文本
Selection.Copy '复制
Selection.EndKey Unit:=wdStory '将光标移到文件结尾(我是用Ctrl+End实现的)
Selection.InsertBreak Type:=wdPageBreak '插入分页符
Selection.Paste '粘贴
End Sub 原本是5句代码,我分在两部分。第2部分的3句在下面的If结构里。 If K Mod 15 = 0 And K < intCount Then '如果K到达15的倍数且小于总记录数时增加一页(等于总数的话就不加了)
intTabCount = intTabCount + 1
Doc.Selection.EndKey Unit:=6 'wdStory
Doc.Selection.InsertBreak Type:=7 'wdPageBreak
Doc.Selection.Paste
End If 代码里把参数直接用数字代替时因为只有引用了“WORD 9.0 Object Library”才能使用参数。但这样不能在安装OFFICE XP的机器上使用,降低了兼容性。 至于如果获得参数代表的数字,很简单,在WORD的VBA编辑器的立即窗口里输入: ? wdStory
6 3.关于主/子窗体的问题: 程序里是用DAO获得子窗体的记录集,然后再根据记录集的内容填写的。使用ADO也可以。所以,只要能取得记录集,是主窗体还是子窗体根本就不是问题。 4.其它要注意的问题: a.因为模板是每次都要使用的,而且要求里面是空的才行。所以最后会用SaveAs另存一个文件名,至于起什么名可以有很多种方法。程序里是用的日期相关的名字。 b.如果一开始就让文档显示出来,则在填写数据时页面会反复闪烁,而且填写速度很慢,所以程序里是在隐藏的状态下填写,然后再显示出来。 c.现在程序里还缺少一些错误处理的部分,有待进一步改进,也欢迎大家指正。 这是在access中国网站上看到的,很多我都不懂。 最好,这里的斑竹可以指点指点,我也想学习word调用access数据库的知识 先谢了
|