Word VBA宏将段导出为PDF

时间:2017-08-02 21:58:33

标签: vba ms-word word-vba

背景:我目前有一个文档,可以通过Word中的分节符分成不同的部分。我有一个宏来打印这些部分的pdf到用户选择的目录和宏导出静态页面作为pdf' s。我暂时在导出宏中输入了页码,因为保存功能的工作速度比pdf函数的打印速度快得多。但我想将宏导出部分作为pdf,页面编号可以更改。

注意:根据我在主文件上所做的工作,部分页面可能会发生变化,因此在我的宏中使用静态页码只是临时解决方案。解决这个对我来说非常重要。

我到目前为止(这是导出宏):

Bundle

我希望拥有什么

似乎我作为PDF导出的宏不允许我将这些部分放在范围字段中,我已经尝试了,它总是给我一个错误信息。我目前有静态页面范围(3-4)。我想也许在那之前我可以输入一些代码,这将返回我导出的部分的起始页码和结束页码。然后我可以为返回的任何内容分配一个字符串,然后在range函数中输入这些字符串作为页码?

我真的不擅长这些东西,但是经历了很多论坛,试图拼凑其他人没有运气的建议。可能有一个更简单的解决方案,但只要它的工作真的很棒。我已经试图解决这个问题已经有一段时间了,但是我经历了太多的论坛,并且是VBA的超级初学者。

如果有人能够帮助我,我会非常感激。

谢谢

更新: 我按照建议尝试了导出部分代码,但我的字段在导出的文档中被删除,并添加了空白页面。因此,我尝试使用区域范围来设置导出范围的第一个和最后一个整数。我可以获得intValue1,它给出了节范围的最后一页。但我不知道如何获得部分范围的第一页的intValue2。以下是我在保存提示和导出代码之间添加的内容。

Sub PLANv()
'
' PLANv Macro
'
'
Dim strName As String

strName = InputBox(Prompt:="Save To:", Title:="Save file to:", _
Default:="C:\Users\PRESTONAVH\Desktop\Task Order Files\")

If strName = vbNullString Then
    Exit Sub
Else

End If

ActiveDocument.ExportAsFixedFormat OutputFileName:= _
    strName & "PLAN.pdf", _
    ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
    wdExportOptimizeForPrint, Range:=wdExportFromTo, From:=3, To:=4, Item:= _
    wdExportDocumentContent, IncludeDocProps:=False, KeepIRM:=True, _
    CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
    BitmapMissingFonts:=True, UseISO19005_1:=False
End Sub

(适用解决) 大家好,感谢您帮助我,我现在有最终的代码对我有用。这是代码:

Dim intValueR As Range
Dim intValue1 As Integer
Dim intValue2 As Integer
Set intValueR = ActiveDocument.Sections(3).Range
intValue1 = CStr(intValueR.Information(wdActiveEndPageNumber))
intValue2 = ??

3 个答案:

答案 0 :(得分:1)

好吧,所以我找到了一个解决方案,它真的很丑,但它确实有效。因为我不知道如何将节范围的第一部分设置为整数,但我确实知道如何将节范围的最后部分设置为整数。我只是将第一部分设置为上一部分的最后部分' s范围加1.

结果就是这段代码:

|

如果某人有更清洁的方法,那就太棒了。但如果有人需要这样的东西,它就会为我工作。

向@TonyM和@jsotola致敬!

答案 1 :(得分:0)

这是如何导出一个范围...通过录制宏来达到这个目标,最后以Selection.ExportAsFixedFormat开始.... Selection是一个范围对象..... < / p>

ActiveDocument.Range(800, 1000).ExportAsFixedFormat _
    OutputFileName:=strName & "PLAN.pdf", _
    ExportFormat:=wdExportFormatPDF, _
    OpenAfterExport:=True, _
    OptimizeFor:=wdExportOptimizeForPrint, _
    ExportCurrentPage:=False, _
    Item:=wdExportDocumentContent, _
    IncludeDocProps:=False, _
    KeepIRM:=True, _
    CreateBookmarks:=wdExportCreateNoBookmarks, _
    DocStructureTags:=True, _
    BitmapMissingFonts:=True, _
    UseISO19005_1:=False

更改第一行以导出第二部分

    ActiveDocument.Sections(2).Range().ExportAsFixedFormat _

您可以这样做以查看将要导出的内容...用于调试,以查看您推荐的范围

ActiveDocument.Sections(2).Range().Select   ' you can instead paste this line into the "Immediate Window", and then look at your document
Stop

答案 2 :(得分:0)

我建议您先选择要导出的部分,然后使用wdExportSelection代替wdExportFromTo。要选择该部分,请参阅使用Selection.Range.Sections.First.Range.Select的{​​{3}}或尝试使用宏录制器。但是,如果您确实想使用wdExportFromTo,那么关于“将这些字符串作为页码输入”的问题的答案是,是的,您有正确的想法,但您需要使用整数而不是字符串。