从excel范围

时间:2018-01-31 16:52:44

标签: excel vba excel-vba

我目前正处理用户在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

2 个答案:

答案 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