【发布时间】:2015-03-30 03:02:04
【问题描述】:
我尝试将 Word 2010 文档保存为 PDF,然后想对用户在相应对话框中为此目的选择的文件(名称)做一些事情。 另外,我想对对话框设置进行一些预配置。 但是,以下宏(在 Microsoft Visual basic for Applications 7.0 中,即您在简单地录制然后修改宏时得到的东西)不起作用:
Sub MyMacro()
dim retval as long
dim DidTheExportToPdfActuallyTakePlaceSuccessfully as Boolean
dim WhatWasThePdfFilenameTheUserChoseFinally as String
With Dialogs(wdDialogExportAsFixedFormat)
.ExportFormat = wdExportFormatPDF
.OpenAfterExport = True
.OptimizeFor = wdExportOptimizeForPrint
.Range = wdExportAllDocument
.Item = wdExportDocumentContent
.IncludeDocProps = True
.KeepIRM = True
.CreateBookmarks = wdExportCreateNoBookmarks
.DocStructureTags = True
.BitmapMissingFonts = True
.UseISO19005_1 = False
retval = .Show()
' DidTheExportToPdfActuallyTakePlaceSuccessfully = ???
' WhatWasThePdfFilenameTheUserChoseFinally = ???
end with
end sub
首先,我在.ExportFormat 等所有行中都出现错误。
这些问题似乎是由后期绑定引起的。
为了规避这个问题,我尝试在顶部添加option strict off,但这会立即产生编译错误(“Base or Compare or Explicit or Private expected”)。
我还阅读了有关反射的信息,但根据在线发现(例如dim x as System.Type 或y.gettype()),似乎需要的东西也不能编译......
如果我只是删除有问题的行,对话框会成功显示,并且 pdf 导出成功。但是,无论文件实际导出还是用户点击取消,retval 似乎始终为 0。更不用说提取实际 pdf 文件名的失败方式与预填充对话框选项的方式相同。
我有点不知所措,因为通过 MS 在线帮助进行的所有谷歌搜索和搜索往往只会将我带到几乎兼容的情况(特别是,没有找到编译,见上文)。实现目标的正确方法是什么?
【问题讨论】:
-
你在这里处理好几层单词历史。在您看来,wdDialogExportAsFixedFormat 对话框应该具有您尝试使用的属性(例如,基于对话框中的名称),但对 Word 的内置对话框的编程支持在最好的情况下是相当随意的。当 Word 的对话框不支持你想要的东西时,你最终不得不发出自己的盒子,然后发出真正做你想要的 word 命令。
-
好吧,导出为 pdf 的能力相对较新,所以我没想到会有太多考古尘埃 :)
-
是的,历史是旧对话框倾向于让您使用后期绑定的属性名称设置有用的属性。较新的对话框(从 Word 2000 开始)往往不会。 “提防极客拿走礼物”之类的。
-
所以最简单的方法可能是使用 Application.FileDialog(msoFileDialogSaveAs) 提示输入文件名,编写您自己的用户窗体以设置/获取您需要的任何其他选项,然后调用 ExportAsFixedFormat做这项工作。
-
@bibadia D'oh。显然,新版本带有记录的“更改列表”而不是“改进列表”是有原因的。为了网站的缘故,我想您应该将您的 cmets 制定为可接受的答案