将MS Publisher 2010文档拆分为多个文件

时间:2014-11-23 15:30:31

标签: vba pdf split publisher

我想将多页MS Publisher 2010文档拆分为一组单独的文档,每页一个。

起始文档来自邮件合并,我正在尝试生成一组编号和命名的票证作为PDF格式发送给人们进行事件(这是针对慈善机构)。邮件合并似乎工作正常,我可以保存合并的文档,它看起来没问题,例如一份50人的名单,给我一份50页的文件。

理想情况下,结果将是一组PDF。

我尝试创建一些简单的VBA代码来执行此操作,但它不能始终如一地工作。如果我在下面尝试这个非常简单的宏,我会得到正确数量的文档,但是每5个文档中只有1或2个文档具有正确的内容。大多数文件都是空的。

Sub splitter()
Dim i As Integer
Dim Source As Document
Dim Target As Document

Set Source = ActiveDocument

For i = 1 To Source.Pages.Count
    Set Target = Documents.Add
    Source.Pages(i).Shapes.Range.Copy
    Target.Pages(1).Shapes.Paste
    Target.SaveAs Filename:="C:\Temp\Ticket_" & i
    Target.Close
    Set Target = Nothing
    Next i

End Sub

我确实有时会收到剪贴板繁忙的错误,但并非总是如此。

另一种方法可能是从主文档开始,并在单独的文档上循环,并填写每个人的票据的个人详细信息,并直接生成PDF。但这似乎更复杂,我不是VB程序员(但是已经做了C ++等20多年,所以我可以编程:-))

最后一个烦恼是它似乎继续为每个文档打开一个新的Publisher窗口。然后关闭50多个发布者副本需要一段时间,笔记本电脑开始爬行......

请告知如何最好地解决这些问题。我可能错过了一些微不足道的东西,作为一个相对的VB(A)新手。

提前感谢任何建议

1 个答案:

答案 0 :(得分:0)

尝试编写类似的代码:

  1. Open Publisher应用程序(CreateObject()?)
  2. 打开发布商文档(doc.Open(filename))
  3. 将总页数存储在全局变量(doc.Pages.Count)
  4. 关闭文档(doc.Close())
  5. 为每个页面循环以下内容

    • 复制pub文件并将其重命名为name & "page" & X
    • 打开新的pub文件
    • 从pub文件
    • 中删除除第X页以外的所有页面
    • doc.Save()
    • doc.Close()
  6. 使用VBA复制文件很简单,但在Publisher VBA中复制页面非常麻烦,因此应该更容易实现