繁体   English   中英

从模板插入 Word 文档并从 Excel 填充书签

[英]Insert Word document from template and fill bookmarks from Excel

我需要打开一个模板文件,填充它的书签,从同一个模板插入一个新页面,再次填充书签......但仅限于插入的页面。

Sub test()
Dim WA As Object, WD As Object
    Set WA = CreateObject("Word.Application")
    Set WD = WA.Documents.Add(TemplatesName)
        For i = 1 To 100
            fillBookmarks WA, WD
            With WD.Range
                .Collapse 0
                .InsertBreak Type:=wdSectionBreakNextPage
                .End = WD.Range.End
                '.Collapse 0
                .InsertFile TemplatesName
            End With
        Next i
    WD.SaveAs PdfFile, 17
    WD.Close False: Set WD = Nothing
    WA.Quit False: Set WA = Nothing
End Sub

Function fillBookmarks(ByVal WA As Object, ByVal WD As Object)
    With WD
        .Bookmarks.Item("Client_Code").Range.Text = "545"
            .Bookmarks.Item("Client_Code").Delete
        .Bookmarks.Item("Company_Name").Range.Text = "545"
            .Bookmarks.Item("Company_Name").Delete
        .Bookmarks.Item("Company_Street").Range.Text = "545"
            .Bookmarks.Item("Company_Street").Delete
        .Bookmarks.Item("Company_PostCode").Range.Text = "545"
            .Bookmarks.Item("Company_PostCode").Delete
        .Bookmarks.Item("Company_Country").Range.Text = "545"
            .Bookmarks.Item("Company_Country").Delete
    End With
End Function

更新:以下做得很好,但顺序相反(第一页变成了最后一页)如何反转它?

        With WD.Range
            .InsertBreak Type:=wdSectionBreakNextPage
            .Collapse Direction:=wdCollapseEnd
            .MoveEnd Unit:=wdCharacter, Count:=-1
            .InsertFile TemplatesName
        End With

书签仅在第一页上填充(删除后也是如此),那么如何从模板插入页面并填充书签?

这里有几个问题: 1. 书签名称在文档中必须是唯一的。 因此,每当您插入新部分时,如果书签名称已存在,就会删除书签。 2. 在新材料的正确位置获取插入点。

使用 Word Range对象是正确的方法,但需要稍微改进。 问题中的代码总是尝试处理整个文档。 然而,有必要使用更“精确”的范围。 我已经声明了两个 Range 对象:一个用于整个文档,一个用于标记新内容应该插入的位置的“定位点”。

注意使用Duplicate来“复制”原始文档 Range。 相反,如果使用= ,那将是一个精确的副本:更改一个将自动更改另一个。

还要注意两个范围的StartEnd属性的用户始终将“精确定位”范围定位在文档的末尾。

无需将 Word 应用程序传递给填充书签的函数,因此我已在后面的示例代码中删除了它。

对于遇到这个问题并想使用代码的人:如果书签是[内容]而不是工字梁类型(书签有文本),则原始代码将导致错误。 将文本写入 [content] 书签会自动删除书签。 在这种情况下,函数fillBookmarks_withContent将起作用。 最后的函数fillRemoveBookmarks将适用于两种类型的书签。

Sub test()
Dim WA As Object, WD As Object
Dim rngDoc as Object, rngInsert as Object 'both data type Word.Range
    Set WA = CreateObject("Word.Application")
    Set WD = WA.Documents.Add(TemplatesName)
    Set rngDoc = WD.Content
    Set rngInsert = rngDoc.Duplicate
        For i = 1 To 100
            fillBookmarks WD
            With rngInsert
                .Start = rngDoc.End
                .InsertBreak Type:=wdSectionBreakNextPage
                .Start = rngDoc.End
                .InsertFile TemplatesName
            End With
        Next i
    WD.SaveAs PdfFile, 17
    WD.Close False: Set WD = Nothing
    WA.Quit False: Set WA = Nothing
End Sub

Function fillBookmarks(ByVal WD As Object)
    With WD
        .Bookmarks.Item("Client_Code").Range.Text = "545"
            .Bookmarks.Item("Client_Code").Delete
        .Bookmarks.Item("Company_Name").Range.Text = "545"
            .Bookmarks.Item("Company_Name").Delete
        .Bookmarks.Item("Company_Street").Range.Text = "545"
            .Bookmarks.Item("Company_Street").Delete
        .Bookmarks.Item("Company_PostCode").Range.Text = "545"
            .Bookmarks.Item("Company_PostCode").Delete
        .Bookmarks.Item("Company_Country").Range.Text = "545"
            .Bookmarks.Item("Company_Country").Delete
    End With
End Function

Function fillBookmarks_withContent(ByVal WD As Object)
    With WD
        .Bookmarks.Item("One").Range.Text = "545"
        .Bookmarks.Item("TWo").Range.Text = "544"
    End With
End Function

Function fillRemoveBookmarks(ByVal wd As Word.Document)
    With wd
        .Bookmarks.Item("One").Range.Text = "545"
        If Bookmarks.Exists("One") Then .Bookmarks("One").Delete

        .Bookmarks.Item("TWo").Range.Text = "544"
        If Bookmarks.Exists("Two") Then .Bookmarks("Two").Delete
    End With
End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM