首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心计算机论文计算机理论
   VBA、Word和数据库的联合编程      ★★★ 【字体: 】  
VBA、Word和数据库的联合编程
收集整理:佚名    来源:本站整理  时间:2009-01-10 12:07:32   点击数:[]    

[本篇论文由上帝论文网为您收集整理,上帝论文网http://paper.5var.com将为您整理更多优秀的免费论文,谢谢您的支持]

摘要  本文介绍了用VBA作为开发语言,用Access或foxpro作为数据库, 用word中的书签作为媒介,实现数据库在Word中的自动替换方法,并以通知书为例给出了源程序。
 
 关键词  VBA Word 数据库 bookmark(书签)

在实际工作中,常常需要将数据库中的数据放在Word文挡中。例如学校每期都要将学生的成绩填入到通知书中寄发给学生(家庭)。传统的实现方法是在Word手工输入或用数据库软件编写一个专门的程序(模块)来完成此项工作。本文采用VBA作为开发语言,用宏命令的方法实现了Access数据库或foxpro数据库中的数据在Word中的自动成批替换。
1 实现方法
    先在Word中建立一个名为“通知书.dot”的模板,将通知书中固定的文字内容输入到该模板中, 将变动的文字内容(取数据库中的字段值)设置成书签(右图中的name、math等)。为了编程方便,书签名可取数据库表中相应的字段名。完成后存入Office的Templates(模板)目录下。
   要实现VBA与数据库Microsoft Access 97的连接,在Word中选主菜单 ”工具/宏/宏名”打开Visual Basic编辑器;选VBA主菜单条上[工具]菜单项下的[引用]命令,激活[引用]对话框,从可使用的引用列表中选择Microsoft DAO 2.5/3.5 Compatibility Libray一项,然后单击[确定]按钮,把它引用到工程中来。
     接下来在模板中编写出一条宏命令,直接在Word中用程序代码实现对数据库的读取。对Access数据库,用语句Set md = DBEngine. OpenDatabase (“成绩库.mdb”)打开名为“成绩库.mdb”的数据库,用语句 Set rs = md. OpenRecordset("学生成绩表", dbOpenTable) 打开数据库中的表名为"学生成绩表"的记录集,本命令只对记录集进行查询,为了提高查询速度,选择了快照dbOpenSnapShot类型的记录。对于foxpro的dbf数据库,用语句 Set md = OpenDatabase("d:/grade/学生成绩表", False, False, "foxpro 2.5")打开名为“成绩库.dbf”的数据库,用语句Set rs = md.OpenRecordset("学生成绩表")的记录集。因为数据库中一条记录对应一个学生,每个学生都要打印一份通知书,都要用通知书的内容(包括书签),要将模板中的通知书全部内容复制到一个新建的临时文档中,处理完一条记录后,把通知书内容从新建的临时文挡中复制过来供下一条记录使用。对于每个通知书(对应一条记录),用循环将数据表中的字段名用数组的形式保存,再根据通知书中的书签名与保存的字段名比较,如果存在则用语句  mydoc1.Bookmarks(i).Select选择的书签名, 用数据表中相应的字段值(rs.Fields(字段名))来替代文档中的所选择的书签名。右图为运行宏命令后的一个通知书。
2  源程序清单
‘从数据题中读取数据的宏,在Word97(2000)上调试运行
‘开发者:湖南工程学院 陈华光
Sub start()
 Dim i, j, k, m, nrecord , txtnumber  As Integer
 Dim aname(1 To 20) As String
 Set md = DBEngine.OpenDatabase("D:/grade/成绩库.mdb")
 Set rs = md.OpenRecordset("学生成绩表", dbOpenTable)
 Set mydoc1 = ActiveDocument
 txtnumber = mydoc1.Characters.Count
 Set range1 = mydoc1.Range (start:=0, End:=txtnumber)
 range1.Copy
 mydoc2 = Documents.Add
 Selection.Paste
 Set range2 = mydoc2.Range(start:=0, End:=txtnumber)
 mydoc1.Activate
 On Error Resume Next
 rs.MoveLast
 nrecord = rs.RecordCount
 On Error GoTo doerror
 For k = 1 To 20
  aname(k) = rs.Fields(k).name
 Next k
doerror:
 For m = 1 To nrecord
  If m = 1 Then rs.MoveFirst Else rs.MoveNext
  For k = 1 To 5
   totalnumber = mydoc1.Bookmarks.Count '已存在的书签数
   For i = totalnumber To 1 Step -1
    bname = rs.Fields(aname(k))
    If UCase$(mydoc1.Bookmarks(i).name) = UCase$(aname(k)) Then
     mydoc1.Bookmarks(i).Select
     Selection.TypeText Text:=bname
    End If
   Next i
  Next k
  Selection.MoveDown Unit:=wdLine, Count:=4
  If m < nrecord Then
   mydoc2.Activate
   range2.Copy
   mydoc1.Activate
   Selection.Paste
  End If
 Next m
 Documents(mydoc2).Close savechanges:=wdDoNotSaveChanges
End Sub


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:组件机制与操作系统的实现

  • 下一篇文章:Windows NT/2000系统下进程的隐藏
  • 返回上一页】【打 印】【关闭窗口
    中查找“VBA、Word和数据库的联合编程”更多相关内容 5VAR论文频道
    中查找“VBA、Word和数据库的联合编程”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››中小企业办公自动化系统的设计与实...
  • ››未雨绸缪:关于我国电子商务税收对...
  • ››网上书店为钱做秀 行业走势两极分...
  • ››Win2000索引服务的WEB应用
  • ››宽带化――电信发展的必由之路务
  • ››电子商务中x种错误思路和做法
  • ››网络营销与传统营销相比有何优势
  • ››Internet的下一个热点 从内容走向服...
  • ››基于CNAPS的流水号管理方法
  • ››网络时代的财务与会计:管理集成与...
  • ››VBA、Word和数据库的联合编程
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .