Vba 如何访问visual basic word宏中的对话框字段

Vba 如何访问visual basic word宏中的对话框字段,vba,ms-office,ms-word,Vba,Ms Office,Ms Word,我尝试将Word 2010文档保存为PDF,然后希望对用户在相应对话框中为此目的选择的文件(名称)执行一些操作。 此外,我还想对对话框设置进行一些预配置。 但是,以下宏(在Microsoft Visual basic for Applications 7.0中,即仅录制然后修改宏时得到的内容)不起作用: Sub MyMacro() dim retval as long dim DidTheExportToPdfActuallyTakePlaceSuccessfully as Boolea

我尝试将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
等中都有错误。 这些问题似乎是由后期绑定造成的。 为了避免这个问题,我尝试在顶部添加
选项strict off
,但这会立即产生编译错误(“Base或Compare或Explicit或Private expected”)。 我也读过关于反射的文章,但根据在线调查结果(例如
dim x as System.Type
y.gettype()
)似乎也没有编译这些必要的东西

如果我只是删除有问题的行,对话框将成功显示,pdf导出将成功进行。但是,
retval
似乎始终为0,无论文件是实际导出的还是用户单击“取消”。更不用说提取实际pdf文件名的失败方式与预填充对话框选项的失败方式相同


我有点不知所措,因为所有通过MS online help进行的谷歌搜索和搜索往往只会将我带到几乎兼容的情况(尤其是,没有发现编译,请参见上文)。实现我的目标的正确方法是什么?

广义而言,只有Word中较旧的内置对话框支持“后期绑定”命名参数。大约从Word2000开始,他们中的大多数(如果不是全部的话)只识别Dialog类的早期绑定成员

可能的解决办法包括

  • 尝试使用Sendkeys(我总是很难做到最好 (次)
  • 尝试通过WIN32+Windows消息控制对话框窗口(不知道 (关于可行性)
  • 尽可能调整其中一个标准应用程序文件对话框(在 在这种情况下,可能是Application.FileDialog(msoFileDialogSaveAs)), 然后使用您自己的UserDialog进行后续操作,该对话框会提示您输入任何其他信息 选择所需的选项,然后调用ExportAsFixedFormat来执行此工作
  • (+在(c)上的变体,例如使用WIndows窗体在.NET中执行部分操作)

您在这里处理的是多层次的文字历史。在您看来,wdDialogExportAsFixedFormat对话框似乎应该具有您尝试使用的属性(例如,基于对话框中的名称),但对Word内置对话框的编程支持在最好的时候是相当随意的。当Word的对话框不支持您想要的内容时,您最终必须发出自己的对话框,然后发出Word命令,该命令实际上可以执行您想要的内容。嗯,导出为pdf的功能相对较新,因此我不希望有太多考古灰尘超出此范围:)是的,历史是,旧的对话框往往允许您使用后期绑定的属性名称设置有用的属性。较新的对话框(大约从Word 2000开始)往往不会。“小心极客拿走礼物”之类的。所以最简单的方法可能是使用Application.FileDialog(msoFileDialogSaveAs)来提示输入文件名,编写您自己的用户表单来设置/获取您需要的任何其他选项,然后调用ExportAsFixedFormat来完成工作。@bibadia D'oh。显然,新版本有一个记录在案的“变更列表”而不是“改进列表”是有原因的。为了网站的缘故,我想你应该把你的评论表述成一个可以接受的答案。我最终还是采纳了第三个建议。