【问题标题】:how to access dialog fields in visual basic word macros如何访问 Visual Basic Word 宏中的对话框字段
【发布时间】: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.Typey.gettype()),似乎需要的东西也不能编译......

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

我有点不知所措,因为通过 MS 在线帮助进行的所有谷歌搜索和搜索往往只会将我带到几乎兼容的情况(特别是,没有找到编译,见上文)。实现目标的正确方法是什么?

【问题讨论】:

  • 你在这里处理好几层单词历史。在您看来,wdDialogExportAsFixedFormat 对话框应该具有您尝试使用的属性(例如,基于对话框中的名称),但对 Word 的内置对话框的编程支持在最好的情况下是相当随意的。当 Word 的对话框不支持你想要的东西时,你最终不得不发出自己的盒子,然后发出真正做你想要的 word 命令。
  • 好吧,导出为 pdf 的能力相对较新,所以我没想到会有太多考古尘埃 :)
  • 是的,历史是旧对话框倾向于让您使用后期绑定的属性名称设置有用的属性。较新的对话框(从 Word 2000 开始)往往不会。 “提防极客拿走礼物”之类的。
  • 所以最简单的方法可能是使用 Application.FileDialog(msoFileDialogSaveAs) 提示输入文件名,编写您自己的用户窗体以设置/获取您需要的任何其他选项,然后调用 ExportAsFixedFormat做这项工作。
  • @bibadia D'oh。显然,新版本带有记录的“更改列表”而不是“改进列表”是有原因的。为了网站的缘故,我想您应该将您的 cmets 制定为可接受的答案

标签: vba ms-office ms-word


【解决方案1】:

一般来说,只有 Word 中较旧的内置对话框支持“后期绑定”命名参数。从 Word 2000 开始,它们中的大多数(如果不是全部)只识别 Dialog 类的早期绑定成员。

可能的解决方法包括

  • 尝试使用 Sendkeys(IMO 总是很难做到最好 次)
  • 尝试通过WIN32+Windows消息控制Dialog窗口(不知道 那里的可行性)
  • 尽可能地调整标准应用程序文件对话框之一(在 这种情况,可能是 Application.FileDialog(msoFileDialogSaveAs) ), 然后跟进您自己的 UserDialog 提示输入任何其他 您需要的选项,然后调用 ExportAsFixedFormat 来完成这项工作。
  • (+(c) 的变体,例如,在 .NET 中使用 WIndows 形式进行一些操作)

【讨论】:

  • 我最终遵循了第三个建议。
猜你喜欢
  • 2011-04-16
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多