我需要打开一个模板文件,填充其书签,从同一模板插入新页面,再次填充书签...,但仅在插入的页面上。
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
仅在首页上填充书签(在删除后也是如此),那么如何从模板插入页面并填充书签?
答案 0 :(得分:1)
这里有两个问题:1.书签名称在文档中必须为 unique 。因此,每当您插入新部分时,如果书签名称已经存在,则书签将被删除。 2.将插入点放在新材料的正确位置。
使用Word Range
对象是正确的方法,但是需要进行一些改进。问题中的代码始终尝试使用整个文档。但是,有必要使用更“精确的”范围。我已经声明了两个Range对象:一个用于整个文档,一个用于标记应在其中插入新内容的“针点”。
请注意,使用Duplicate
来“复制”原始文档“范围”。相反,如果使用=
,那将是一个精确的副本:更改一个将自动更改另一个。
还请注意使用这两个范围的Start
和End
属性的用户,始终将“定位点”范围定位在文档的末尾。
不需要将Word应用程序传递给填充书签的函数,因此在下面的示例代码中已将其删除。
对于遇到此问题并想使用代码的人:如果书签是[内容]而不是工字梁类型(书签中的文本 ),则原始代码将导致错误。将文本写入[内容]书签会自动删除该书签。在这种情况下,功能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