【问题标题】:Importing Word Bookmarks to Excel将 Word 书签导入 Excel
【发布时间】:2018-01-10 19:08:46
【问题描述】:

我正在尝试将 Word 书签从选定的 Word 文档中导入特定的 Excel 单元格。我有一个宏,它获取 excel 数据并将其填充到 Word 模板中。我还需要能够获取该 Word 文档并将其重新导入 Excel。这是我目前所拥有的:

Sub Import()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim ws As Worksheet
Dim nextRow As Range

wdFileName = Application.GetOpenFilename("Word files,*.doc;*.docx", , _
"Browse for document") 'dialog box
    If wdFileName = False Then
        MsgBox "No File Selected."
        Exit Sub
    Else
        Set wdDoc = CreateObject("Word.Application")
        wdDoc.Visible = True
            On Error Resume Next
        wdDoc.Documents.Open Filename:=wdFileName
            On Error GoTo 0
        wdDoc.Documents(wdFileName).Activate
            On Error GoTo 0
    End If


With wdDoc 'start import

Set ws = ThisWorkbook.Sheets("Sheet1")
Set nextRow = Cells(Rows.Count, "B").End(xlUp).Offset(1)

ws.Range("H" & (nextRow.Row)).Value2 = wdDoc.Bookmarks("Bookmark1").Range.Value2

End With
wdDoc.Close SaveChanges:=False
End Sub

我在 "ws.Range("H" & (nextRow.Row)).Value2 = wdDoc.Bookmarks(" Named_Insured").Range.Value2"

我在这里俯瞰什么?

【问题讨论】:

    标签: excel import ms-word bookmarks vba


    【解决方案1】:

    第 1 步:在 VBA 窗口中,单击“工具”,然后单击“参考”,并确保“Microsoft Word xx.0 对象库”旁边有一个复选框

    第 2 步:将问题行改为-

    ws.Range("H" & (nextRow.Row)).Value = _
    ActiveDocument.Bookmarks("Name_Insured").Range.Text
    

    第 3 步:将最后一行更改为-

    ActiveDocument.Close SaveChanges:=False
    

    【讨论】:

    • 感谢您的回复,我之前将它作为 .text(用于 ws.range 和 wddoc.bookmarks),它仍然给了我同样的错误。书签是一个选择,或者至少应该是。
    • 尝试:ws.Range("H" & (nextRow.Row)).Value = wdDoc.Bookmarks("Named_Insured").Range.Text
    • 我认为您遇到的问题是第一部分需要为 Excel 编写(通常使用 .Value),而第二部分需要为 Word 编写(不使用.价值)
    • 原来我就是这样(我只是把导出代码颠倒过来了)。从那时起,我几乎经历了每一种组合,每次碰到这堵墙。
    • 知道了,对于将来寻找答案的其他人,我将 set wdDoc = Createobject 及其后面的所有内容更改为 Set wdDoc = Documents.Open(Filename:=wdFileName)
    【解决方案2】:

    你可以像这样使用书签。

    Sub PushToWord()
    
    Dim objWord As New Word.Application
    Dim doc As Word.Document
    Dim bkmk As Word.Bookmark
    sWdFileName = Application.GetOpenFilename(, , , , False)
    Set doc = objWord.Documents.Open(sWdFileName)
    On Error Resume Next
    
        ActiveDocument.Variables("BrokerFirstName").Value = Range("B1").Value
        ActiveDocument.Variables("BrokerLastName").Value = Range("B2").Value
        ActiveDocument.Fields.Update
    
    On Error Resume Next
    objWord.Visible = True
    
    End Sub
    

    或者,像这样使用 DocVariables。

    Sub PushToWord()
    
    Dim objWord As New Word.Application
    Dim doc As Word.Document
    Dim bkmk As Word.Bookmark
    sWdFileName = Application.GetOpenFilename(, , , , False)
    Set doc = objWord.Documents.Open(sWdFileName)
    'On Error Resume Next
    
    objWord.ActiveDocument.variables("BrokerFirstName").Value = Range("BrokerFirstName").Value
    objWord.ActiveDocument.variables("BrokerLastName").Value = Range("BrokerLastName").Value
    objWord.ActiveDocument.variables("Ryan").Value = Range("Ryan").Value
    
    
    objWord.ActiveDocument.Fields.Update
    
    'On Error Resume Next
    objWord.Visible = True
    
    End Sub
    

    顺便说一句,您从 Excel 而非 Word 运行这些代码示例。

    【讨论】:

      猜你喜欢
      • 2019-03-20
      • 2018-02-10
      • 2011-10-14
      • 1970-01-01
      • 2021-08-07
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      相关资源
      最近更新 更多