Excel VBA - 交叉引用 Bookmark/Form 字段到 Word

Excel VBA - Cross Referencing Bookmark/Form Field to Word

我对 VBA 知之甚少,但仍在不断学习。

我一直在 word 中使用书签来填充来自 excel 的数据。但是,由于一些数据的内容需要在文档中重复,所以我尝试使用Text Form Field/Bookmark和REF Field来复制相同的数据。

当我将数据填充到单词时,问题就出现了,文本形式 field/bookmark 消失,导致 REF 字段无法跟踪所引用的数据,因此 "Error! Reference source not found."

总而言之,我要做的是将数据从 excel 填充到锁定的 word 文档,同时保留文本字段 Form/Bookmark 以便让 REF 字段跟踪和复制相同的数据。

有什么方法可以在数据填充到单词后保留文本字段 Form/Bookmark 占位符?这是我无法在 excel VBA.

中解决的代码

在此先感谢您的帮助!

Private Sub CommandButton1_Click()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.Documents.Open "C:\Users\" & Environ("username") & "\Desktop\XXX\XXX"
objWord.ActiveDocument.Unprotect Password:="xxx"
With objWord.ActiveDocument

Dim objBMRange As Range
Set objBMRange = .Bookmarks("pr1").Range.Text = ws.Range("C28").Value
objBMRange.Text = pr1
.Bookmarks.Add "pr1", BMRange
.Fields.Update

objWord.ActiveDocument.Protect Password:="xxx", NoReset:=False, Type:=wdAllowOnlyFormFields
End With

Set objWord = Nothing
End Sub

你快到了。很近,但是你没有把Range对象整理出来。请尝试此代码(仅部分测试)。

Private Sub CommandButton1_Click()

    Dim Ws As Worksheet
    Dim objWord As Object
    Dim Mark As String
    Dim Txt As String
    Dim BmkStart As Long

    Mark = "pr1"
    Set Ws = ThisWorkbook.Sheets("Sheet1")
    Txt = Ws.Range("C28").Value

    Set objWord = CreateObject("Word.Application")
    With objWord
        .Visible = True
        .Documents.Open "C:\Users\" & Environ("username") & "\Desktop\XXX\XXX"
        With .ActiveDocument
            .Unprotect Password:="xxx"

            If .Bookmarks.Exists(Mark) Then
                With .Bookmarks(Mark).Range
                    BmkStart = .Start
                    .Text = Txt
                End With
                .Bookmarks.Add Mark, .Range(BmkStart, BmkStart + Len(Txt))
            End If
            .Fields.Update
            .Protect Password:="xxx", NoReset:=False, Type:=wdAllowOnlyFormFields
        End With
    End With

    Set objWord = Nothing
End Sub

有一点是 Bookmark 定义了一个 Word.Range(不同于在 Excel 中工作时未指定应用程序时得到的 Excel.Range)。另一个,Bookmark 定义了一个范围但它本身不是范围,甚至不是 Word.Range。因此,您可以通过修改其范围 Text 属性.

来获取或设置其文本