【问题标题】:How to properly access Legacy Form Field checkboxes in Word 2013 VBA?如何正确访问 Word 2013 VBA 中的旧表单字段复选框?
【发布时间】:2015-01-10 06:54:09
【问题描述】:

来自this question 我正在尝试获取和设置旧表单字段复选框(MS Word 2013)的值 - 无需在文档上奇怪地滚动/跳转。对于文本字段,这可以由

执行
myField = ActiveDocument.Bookmarks("myField").Range.Fields(1).Result ' get
ActiveDocument.Bookmarks("myField").Range.Fields(1).Result.Text = myValue ' set

但这不适用于复选框。我可以采取哪些命令来相应地访问复选框并且不会奇怪地跳来跳去?

【问题讨论】:

  • 相关:12
  • 是的,绝对... ;-)

标签: vba checkbox ms-word


【解决方案1】:

我对此进行了一些测试,看起来您可以简单地使用CheckBox.Value 属性来访问复选框的值,而无需更改文档中的焦点。将以下代码粘贴到常规模块中,测试这两种方式获取文本框值的区别。

Public Sub TestCheckboxAccess()

    Dim ctl As FormField

    For Each ctl In ActiveDocument.FormFields

        ' Loop through check boxes in current document
        If ctl.Type = wdFieldFormCheckBox Then

            ' This does not scroll the document
            Debug.Print ctl.CheckBox.Value

            ' This does scroll the document
            'Debug.Print ctl.Result

        End If
    Next ctl
End Sub

请注意,在我的系统上,即使不关闭 ScreenUpdating,此代码示例也可以工作。

试试这个,看看能不能解决你的问题!

【讨论】:

  • 这对我没有帮助。尝试将复选框分布在多个页面上,然后它会奇怪地跳来跳去。
  • 您是否按照我在答案中的描述进行了尝试?将代码粘贴到标准模块中,按 F5 运行宏。我有一个多页文档(您发送给我的示例),除非我取消注释访问 Result 属性的行,否则它不会滚动。
  • 你完全正确。我已经相应地修改了我的问题(我说过,.CheckBox.Value 不好)。谢谢!
  • 有趣的是:现在值是 -1 而不是 1。不管怎样,要么是= 0,要么是<> 0,所以我可以妥善处理。
  • 仅供参考,-1 的值也与True 相同,因此您可以在代码中将其作为布尔值处理。 (ctl.CheckBox.Value = True)
猜你喜欢
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
相关资源
最近更新 更多