使用 MS Access 和 VBA 更新 Ms Word 文档中的(字段代码:数据库)字段

Posted

技术标签:

【中文标题】使用 MS Access 和 VBA 更新 Ms Word 文档中的(字段代码:数据库)字段【英文标题】:Using MS Access and VBA to update (Field codes: Database) field in Ms Word Document 【发布时间】:2017-04-06 21:21:28 【问题描述】:

Ms Word Database 字段将数据库查询的结果插入到 Word 表中。

我想使用 VBA 在 ms word 中填充表格,我已经使用 VBA MsAccess 和 MsWord 书签,数据中的模板使文档很难维护。我发现 MSword 有选项插入数据库,并允许您在 msaccess 中实现数据并在更新期间保留预格式化。 以下 数据库字段 代码是使用 Database 命令通过 ODBC 从我的 Access 数据库中查询的结果:

DATABASE \d "C:\My Data Sources\To test World.odc" \c “提供者=MSDASQL.1;持久安全信息=真;扩展 属性=\"DSN=MS 访问数据库;DBQ=H:\CIP BOOK\CIP2.accdb;DefaultDir=H:\CIP BOOK;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;\";初始目录=H:\CIP BOOK\CIP2.accdb" \s "选择DescriptionTAEntry TitleMemo 来自qryTransactions ExtendedWordFill_test 在哪里 ((Project_id = 'PCP13ZOOA06'))" \l "26" \b "191" \h * MERGEFORMAT

首先我的 wdFieldDatabase 有字段(索引),其中索引是索引号(字段对象)。索引号表示字段在选择、范围或文档中的位置

其次我找到一个 Fields.Add 方法 (Word) 这个例子如果要添加一个字段ListNum

 Selection.Collapse Direction:=wdCollapseEnd 
ActiveDocument.Fields.Add Range:=Selection.Range, _ 
 Type:=**wdFieldListNum**, Text:="\s 3"

我想要的是使用 VBA 更新 (字段代码:数据库字段)中的代码基于索引位置并更改(Project_id = 'PCP13ZOOA06)。其他替代方法可以使用在 VBA 中创建代码在特定范围、文档位置添加字段数据库。我想从 access 管理这个,想法是为超过 2oo 个项目创建带有费用表的状态报告。

Field codes: Database field

【问题讨论】:

【参考方案1】:

我现在无法对其进行测试,但是这样的东西对你有用吗?

Option Explicit

Public Sub UpdateDatabaseField()
    Dim fldTarget As Field: Set fldTarget = ActiveDocument.Fields(1) ' TODO: Find your field based on your knowledge of your document
    Dim strProjectIdNew As String: strProjectIdNew = "123456" ' TODO: Determine new project code

    Dim strCodeOld As String: strCodeOld = fldTarget.Code.Text
    Dim ixBegin As Long: ixBegin = InStr(1, strCodeOld, "Project_id") + Len("Project_id")
    Dim ixEnd As Long: ixEnd = InStr(ixBegin, strCodeOld, ")")
    Dim strCodeNew As String: strCodeNew = Left(strCodeOld, ixBegin) & "='" & strProjectIdNew & "'" & Mid(strCodeOld, ixEnd)
    fldTarget.Code.Text = strCodeNew
End Sub

最终代码:

Public Sub UpdateDatabaseField()
Dim fldTarget As Field: Set fldTarget = ActiveDocument.Fields(1) ' TODO: Find your field based on your knowledge of your document
Dim strProjectIdNew As String: strProjectIdNew = "PCP13ZOOA08" ' TODO: Determine new project code

Dim strCodeOld As String: strCodeOld = fldTarget.Code.Text
Dim ixBegin As Long: ixBegin = InStr(1, strCodeOld, "Project_id") + Len("Project_id") - 0
Dim ixEnd As Long: ixEnd = InStr(ixBegin, strCodeOld, ")")
Dim strCodeNew As String: strCodeNew = Left(strCodeOld, ixBegin) & "='" & strProjectIdNew & "'" & Mid(strCodeOld, ixEnd)
fldTarget.Code.Text = strCodeNew
ActiveDocument.Fields(1).Update

结束子

【讨论】:

是工作,我只修改 Len("Project_id") - 1 为 Len("Project_id") - 0

以上是关于使用 MS Access 和 VBA 更新 Ms Word 文档中的(字段代码:数据库)字段的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA (MS Access) 中的 bigint 字段更新 SQL 表

MS Access VBA 和 SQL Server - 记录集更新时 ODBC 调用失败

MS Access VBA 更新组合框表字段

如何更新 ms access vba 中的多值组合框?

有没有办法在 VBA(MS Access 2002 或 2003)中调用任何控件的更新前事件过程?

使用 VBA 断开用户与第三方应用程序使用 MS Access 的连接