关于从ACCESS中向WORD填写数据的问题的说明
关于从access中向WORD填写数据的问题的说明
一、问题来源: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编辑器的立即窗口里输入: ? wdStory6 3.关于主/子窗体的问题: 程序里是用DAO获得子窗体的记录集,然后再根据记录集的内容填写的。使用ADO也可以。所以,只要能取得记录集,是主窗体还是子窗体根本就不是问题。 4.其它要注意的问题:
a.因为模板是每次都要使用的,而且要求里面是空的才行。所以最后会用SaveAs另存一个文件名,至于起什么名可以有很多种方法。程序里是用的日期相关的名字。
b.如果一开始就让文档显示出来,则在填写数据时页面会反复闪烁,而且填写速度很慢,所以程序里是在隐藏的状态下填写,然后再显示出来。
c.现在程序里还缺少一些错误处理的部分,有待进一步改进,也欢迎大家指正。
这是以前写的另外一个由access在WORD里输出报表的例子,也有些不同的东西在里面,请大家参考。
(责任编辑:admin)
- ·Access 获取office的安装路径【函数】
- ·导入导出Excel(.Xlsx)或(.Xls)数据到SQ
- ·浅析Access与Office其他成员之间交流数
- ·Access2003设置压缩和修复数据库的方法
- ·Access2003设置启动窗体与恢复原始设置
- ·妙用Office合并列数据 快速完成报表
- ·对 Microsoft Office 命令栏进行更多编
- ·SQL Server日期计算
- ·SQL语法参考
- ·XLS与MDB文件格式互换全攻略
- ·在Access中调用Excel无法彻底关闭
- ·Access导出到Excel提速之法
- ·Access朗读任意文本/使Access真人发声
- ·解决ACCESS XP 粘贴数字到EXCEL XP会变
- ·用VBA代码下载网络上的文件
- ·把子窗体的内容复制到EXCEL(子窗体可