我目前正处理用户在Excel工作表上填写的内容,按下按钮,然后将数据推送到单词中的书签。
该脚本工作正常,但目前我只能将数据传递到VBA代码中手动命名的位置,而我希望能够从excel中的单元格中查找书签的名称。基本上=如果B中有一个值,则将C中的文本复制到A中命名的文字书签。
我不确定如何实现此目的,以下代码可供参考。
Sub pop()
Dim oWord As Word.Application
Dim oDoc As Document
Dim oDocRange As Word.Range
Dim oBkmRange As Word.Range
Set oWord = New Word.Application
Set oDoc = oWord.Documents.Open("C:\Users\doc.docx", ReadOnly:=False)
Set oDocRange = oDoc.Content
oWord.Visible = True
Dim i As Integer
If Not oDoc.Bookmarks.Exists("Bookmark_1") Then
Exit Sub
End If
Set oBkmRange = oDocRange.Bookmarks("Bookmark_1").Range
For i = 2 To 20
If Worksheets("Text").Range("B" + CStr(i)).Value = "Yes" Then
Worksheets("Text").Range("D" + CStr(i)).Copy
oBkmRange.Collapse 0 'WdCollapseDirection.wdCollapseEnd
oBkmRange.PasteAndFormat (wdUseDestinationStylesRecovery)
End If
Next i
End Sub
答案 0 :(得分:0)
我不确定我是否理解这个问题,但我会试一试。
我们将书签名称放在单元格A1中。然后你就这样拿起来:
BookmarkName = Worksheets("Text").Range("A1").Value
然后你在你的参考文献中使用它:
Set oBkmRange = oDocRange.Bookmarks(BookmarkName).Range
答案 1 :(得分:0)
将书签对象的设置放在循环中,并将其分配给 i 行中的单元格。
Option Explicit
Sub pop()
Dim oWord As Word.Application
Dim oDoc As Document
Dim oDocRange As Word.Range
Dim oBkmRange As Word.Range
Set oWord = New Word.Application
Set oDoc = oWord.Documents.Open("C:\Users\doc.docx", ReadOnly:=False)
Set oDocRange = oDoc.Content
oWord.Visible = True
Dim i As Integer
For i = 2 To 20
With Worksheets("Text")
If .Range("B" + CStr(i)).Value = "Yes" Then
Dim bookmarkName As String
bookmarkName = .Range("A" + CStr(i)).Value
If Not oDoc.Bookmarks.Exists(bookmarkName) Then
Set oBkmRange = oDocRange.Bookmarks(bookmarkName).Range
.Range("D" + CStr(i)).Copy
oBkmRange.Collapse 0
oBkmRange.PasteAndFormat (wdUseDestinationStylesRecovery)
End If
End If
End With
Next i
End Sub