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
属性.
来获取或设置其文本
我对 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
属性.