【问题标题】:Word 2010 VBA CheckboxesWord 2010 VBA 复选框
【发布时间】:2014-10-09 23:51:12
【问题描述】:

希望是一个简单的。 我有一个到处都是复选框的 Word 文档。有什么方法可以将这些复选框作为一个集合访问,我可以循环访问并检查/设置 ID 和 Value 等属性?

作为参考,我已经尝试过 ActiveDocument.ContentControls 集合;它是空的。 我也尝试过 ActiveDocument.Fields。这实际上包含与页面上相同数量的复选框,但我无法将其转换为 Checkbox 以访问我需要的属性。

最后一个问题,是否可以为点击动态分配事件处理程序?

提前谢谢你

【问题讨论】:

  • 您使用什么版本的 Word?另外,复选框是“普通”的还是 ActiveX 对象?
  • Word 2010。我不确定,你知道快速检查的方法吗?如果有帮助,它的类型是 Microsoft Forms 2.0 CheckBox
  • 右键单击一个对象,查看上下文菜单中是否有“格式控制...”条目。如果是,那么是 ActiveX。如果不是,则要么是普通复选框,要么是旧复选框(顺便说一句,该文档有多旧?)。建议:把Word版本放在你的帖子里给大家看。
  • 我有那个选项,所以我猜它是一个 ActiveX 复选框。马上更新

标签: vba checkbox ms-word word-2010


【解决方案1】:

嵌入在您的文档中的所有 ActiveX 字段的集合(假设它的名称是 ThisDocument)是集合 ThisDocument.Fields。此集合的项目是 Field 类的对象。

要查询此集合中对象的值,您可以使用以下内容:

ThisDocument.Fields.Item(1).OLEFormat.Object.Value

要将代码添加到事件处理程序,只需右键单击 ActiveX 控件,然后从上下文菜单中选择“查看代码”。您将获得 Click 事件处理程序:

Private Sub CheckBox1_Click()
     ' empty if event handler not set, VBA code otherwise '
End Sub

要插入代码动态,你需要直接操作代码模块,并逐行添加事件处理程序。这可能很棘手,但基本上,您会执行以下操作:

ThisDocument _
   .VBProject _
   .VBComponents(ThisDocument.CodeName) _
   .CodeModule _
   .InsertLines(<<Line>>, <<String>>)

其中&lt;&lt;Line&gt;&gt; 是您要插入的位置(数字),&lt;&lt;String&gt;&gt; 是您要插入的文本。注意不要插入现有的SubFunction 或自定义类型定义的中间(显然)。

【讨论】:

  • 是否可以为其动态设置 onclick 事件处理程序?
  • 有趣的是,正如您发布的那样,我通过反复谷歌搜索和head-desking 找到了非常相似的代码。当然,您的代码信息量更大,也更简洁。现在要弄清楚如何只进行一次动态代码插入。只是一个简单的问题,这是为复选框分配 On_Click 处理程序的唯一方法吗?
  • @Ryuu 不。正如我所说,还有 手动 方式:右键单击所有控件,然后键入/粘贴代码。它不像以编程方式添加它们那么有趣,但你肯定会少一些头痛。 :-)
  • 很公平。只是想绝对确定没有与 .NET 等中存在的事件处理类似的东西,因此多个事件可以由一个函数处理。感谢您的帮助
  • @Ryuu 当然你可以有一个Sub 来处理来自多个对象的事件。问题是,您需要将Sub“分配”给对象,唯一的方法是在对象的默认处理程序中调用Sub(您需要在答案中声明&lt;&lt;Name&gt;&gt;_Click())。更糟糕的是,您无法将参数传递给 click 事件处理程序,因此您的一般 Sub 会忽略实际调用它的对象 - 这使得它不太有用。
猜你喜欢
  • 2017-02-28
  • 2014-02-22
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多