ACCESS2007:用VBA将Word文档类型OLE对象内容复制到备注字段
提取OLE对象中Word文档内容到备注字段的VBA代码
以下代码可实现将DB_PREV表中pre_testo字段(嵌入的Word文档OLE对象)的文本内容提取并写入同表的pre_report备注字段:
Sub ExtractWordOLEToMemo() Dim db As DAO.Database Dim rs As DAO.Recordset Dim wordApp As Object ' 后期绑定,无需引用Word对象库 Dim wordDoc As Object Dim oleField As DAO.Field Dim memoField As DAO.Field ' 打开当前数据库 Set db = CurrentDb() ' 打开目标表的可编辑记录集 Set rs = db.OpenRecordset("DB_PREV", dbOpenDynaset) ' 后台初始化Word应用 Set wordApp = CreateObject("Word.Application") wordApp.Visible = False ' 隐藏Word窗口,避免干扰 ' 遍历所有记录 Do While Not rs.EOF Set oleField = rs.Fields("pre_testo") Set memoField = rs.Fields("pre_report") ' 检查OLE对象是否存在 If Not IsNull(oleField.Value) Then On Error Resume Next ' 捕获无法打开的OLE对象错误 Set wordDoc = oleField.OLEFormat.Object If Err.Number = 0 Then ' 将Word文档文本写入备注字段 memoField.Value = wordDoc.Content.Text rs.Update Else ' 记录错误信息到备注字段 memoField.Value = "提取失败:" & Err.Description rs.Update Err.Clear End If On Error GoTo 0 ' 恢复默认错误处理 wordDoc.Close SaveChanges:=False Else ' OLE字段为空时的标记 memoField.Value = "无嵌入Word文档" rs.Update End If rs.MoveNext Loop ' 清理资源 rs.Close wordApp.Quit Set wordDoc = Nothing Set wordApp = Nothing Set rs = Nothing Set db = Nothing MsgBox "提取完成!", vbInformation End Sub
使用说明
- 打开Access数据库,按
Alt + F11打开VBA编辑器 - 右键点击数据库对象 → 插入 → 模块,将代码粘贴到模块中
- 直接运行
ExtractWordOLEToMemo过程即可
可选优化(早期绑定)
若希望获得代码提示,可通过工具 → 引用勾选Microsoft Word xx.x Object Library,然后将代码中对象声明改为:
Dim wordApp As Word.Application Dim wordDoc As Word.Document
注意事项
- 运行前请备份数据库,避免数据意外修改
- 仅支持嵌入的Word文档类型OLE对象,其他类型对象无法提取
- 损坏的OLE对象会被标记错误信息,方便后续排查
内容的提问来源于stack exchange,提问作者Stefano Castro
相关产品推荐
相关产品推荐

