【问题标题】:Getting data from Word doc form controls从 Word 文档表单控件获取数据
【发布时间】:2013-11-10 12:47:36
【问题描述】:

我正在 Word .docm(启用宏的 Word 2013 doc)中构建一个表单,目的是对 Access 数据库进行编程以从已完成的表单中导入数据。我已经放置了 textBox 和 comboBox 控件来接收用户输入,但我无法取回数据。

我见过的示例使用 Document.FormFields 集合,就像这样(在 Word 中):

Dim fld as FormField
for each fld in ActiveDocument.FormFields
    Debug.Print fld.Name & " - " & fld.Result.Text
next

但是在我的文档中 Document.FormFields 是空的,但 Document.Fields 有 19 个元素,这恰好是我表单中控件的数量。这很好,除了我似乎无法使用Field 对象获取任何控件的名称或值。 Field.Result.Text 始终为空,并且没有 Field.Name 属性。

那么Field 对象和FormField 对象之间的区别是什么?为什么我看到的所有示例都使用FormFields 时,我的控件会出现在Fields 中?

我是否使用了错误的表单控件?共有三种类型(我希望我不是唯一认为这很荒谬的人)遗留控件、ActiveX 控件和内容控件。我使用的是 ActiveX 类型。

【问题讨论】:

    标签: ms-access vba ms-word


    【解决方案1】:

    一些事情......

    1. 在 MS Word 术语中,“字段”不一定是表单字段。例如,自动更新的日期、链接的图形、页码等都是“字段”类型(或者至少在 Word 的最新版本之前是这样的)。

    2. 出于兼容性原因,最好避免使用 ActiveX 控件。例如,Mac 版本的 Word 不支持它们。

    3. 为了获得最佳兼容性,我个人会坚持使用传统的表单控件。实例根据其书签名称命名,可通过右键单击控件并选择属性来设置。在 VBA 中,他们的数据是通过 FormFields 集合获得的;如果您想要特定字段的值,请使用

      Value = ActiveDocument.FormFields("MyFieldName").Result

    【讨论】:

    • 谢谢!我假设Range 是指Result,它返回一个Range 对象。
    • @jasongetsdown - Result 返回 StringRange Range 对象。由于前者比较简单,所以我更新了答案,谢谢。
    【解决方案2】:

    如果您只想使用现有的字段,您可以从 OLEFormat.Object 中获取值或名称:

    Application.ActiveDocument.Fields.Item(1).OLEFormat.Object.Value
    

    或者

    Application.ActiveDocument.Fields.Item(1).OLEFormat.Object.Name
    

    但是,我同意 Chris 的建议,即避免使用 ActiveX 控件。作为Microsoft says,有很多原因表明它们不是 Word 表单的最佳选择,除非在非常特殊的情况下。

    【讨论】:

      【解决方案3】:

      使用“旧版”表单域和

      //key
      Application.ActiveDocument.FormFields(1).Range.Fields(1).Code
      //value
      Application.ActiveDocument.FormFields(1).Result
      

      是我想出的解决方案吗。

      我看到公司也将书签、默认值、状态/帮助文本用于不同的目的。并不是我会推荐它,但也许他们正在解决我不知道的问题。

      我觉得 .range 有点 hack,但考虑到它只是表单字段的范围,除非表单字段或字段可以有嵌套字段,否则应该没问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-29
        • 2010-09-21
        • 1970-01-01
        • 1970-01-01
        • 2021-01-02
        • 2014-08-20
        • 2022-09-30
        相关资源
        最近更新 更多