我对VBA知之甚少,但仍在学习。
我一直在使用单词中的书签来填充excel中的数据。但是,由于某些数据需要在文档中重复的内容,我尝试使用Text Form Field / Bookmark和REF Field来复制相同的数据。
当我将数据填充到单词时,问题出现了,文本表单字段/书签消失,导致REF字段无法跟踪引用的数据,因此,"错误!未找到参考源。"
总之,我尝试做的是将数据从excel填充到锁定的word文档,同时保留Text Field Form / Bookmark以便让REF字段跟踪和复制数据
在将数据填充到单词后,有没有办法保留文本字段表单/书签占位符?这是我在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
答案 0 :(得分:0)
你快到了。非常接近,但你没有得到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.Range
不同,当你在Excel中指定时没有指定应用程序时会得到Bookmark
。另一方面,Word.Range
定义范围但不是范围本身,甚至不是Text
。因此,您可以通过修改其范围User.js
属性来获取或设置其文本。