vba - 从excel填充word文档而不删除书签

标签 vba excel

我正在尝试根据 Excel 中的数据填充 Word 文档。由于一些特定的工作要求,我需要在 Word 中保留书签。我已将这些站点用作资源。

Replace Text in Bookmark in Word without Deleting Bookmark
http://wordmvp.com/FAQs/MacrosVBA/InsertingTextAtBookmark.htm
http://www.wiseowl.co.uk/blog/s199/word-bookmarks.htm

我在 CopyCell 的最后一行出现编译错误。

Option Explicit
Dim wd As New Word.Application
Dim DataCell As Range

Sub ReportData()

'Open word template
wd.Documents.Open (Range("D4") & Range("D5"))
wd.Visible = True

'Creates range with all of the data used in the report
Dim DataRange As Range
Range("D7").Select
Set DataRange = Range(ActiveCell, ActiveCell.End(xlDown))

'Uses copycell function. "Name" is the bookmark name, 0 is the Rowoffset
For Each DataCell In DataRange
  CopyCell "Name", 0
  CopyCell "Employer", 1
Next

End Sub

Sub CopyCell(BookMarkName As String, RowOffset As Integer)

Dim BMRange As Word.Range

wd.Selection.GoTo What:=wdGoToBookmark, Name:=BookMarkName
Set BMRange = wd.Selection.Range.Duplicate
BMRange.Text = DataCell.Offset(RowOffset, 0).Value
wd.Bookmarks.Add BookMarkName, BMRange

End Sub

最佳答案

BookmarksDocument 的属性对象不是 Word Application目的

所以你必须改变:

wd.Bookmarks.Add BookMarkName, BMRange

至:

wd.ActiveDocument.Bookmarks.Add BookMarkName、BMRange

此外,您可以考虑以下内容:

  • 您应该将公共(public)变量的使用限制在绝对不可避免的地方(例如:与用户窗体通信)
  • 避免 Activate/ActiveXXX/Selection/Select模式并使用完全限定的范围引用
  • 您正在遍历“垂直”范围,然后再次“垂直”偏移当前单元格(即向下一个单元格):您可能想要“水平”偏移(即到相邻单元格)?

  • 对于以上所有内容,我建议对您的代码进行以下重构:
    Option Explicit
    
    Sub ReportData()
    
        Dim wd As Word.Application
        Dim DataCell As Range
    
        Set wd = New Word.Application
    
       'Open word template
        wd.Documents.Open Range("D4") & Range("D5")
        wd.Visible = True
    
        'Creates range with all of the data used in the report
        With Range("D7")
            'Uses copycell function. "Name" is the bookmark name, 0 is the Rowoffset
            For Each DataCell In Range(.Cells, .End(xlDown))
              CopyCell wd, DataCell, "Name", 0
              CopyCell wd, DataCell, "Employer", 1
            Next
        End With
    
        wd.ActiveDocument.Close True '<--| close and save word document
        wd.Quit '<--| close word application
        Set wd = Nothing '<--| clean memory
    End Sub
    
    Sub CopyCell(wd As Word.Application, DataCell As Range, BookMarkName As String, ColOffset As Integer)
    
        Dim BMRange As Word.Range
    
        wd.Selection.GoTo What:=wdGoToBookmark, Name:=BookMarkName
        Set BMRange = wd.Selection.Range.Duplicate
        BMRange.Text = DataCell.Offset(0, ColOffset).Value
        wd.ActiveDocument.Bookmarks.Add BookMarkName, BMRange
    
    End Sub
    

    关于vba - 从excel填充word文档而不删除书签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43210205/

    相关文章:

    c# - OleDb 连接不读取 excel 文件中的所有行

    c# - 如何从 GridView 中的模板字段中获取值?

    vba - 按名称查找列标题并选择列标题下方的所有数据 (Excel-VBA)

    excel - 使用 vba 计算中位数

    vba - 如何在Excel中制作公共(public)词典

    vba - 以编程方式在 VBA 代码中设置断点

    excel - 防止 Excel 数据透视表页面项覆盖上面的单元格

    excel - 如何删除字符串中的换行符

    vba - 字典中的字典

    python - 从 IronPython 将 Excel 工作表另存为文本文件