2014-10-09 107 views
0

希望是一个容易。 我有一个Word文档散布着复选框。有什么方法可以访问这些复选框作为一个集合,我可以循环和检查/设置属性,如ID和值?Word 2010 VBA复选框

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

最后一个问题,是否可以动态地指派一个事件处理程序到点击?

预先感谢您

+0

您使用的是什么版本的Word?此外,复选框是“正常”的还是ActiveX对象? – 2014-10-09 14:56:24

+0

Word 2010.我不确定,您知道快速检查的方法吗? 如果有帮助,它的类型是Microsoft Forms 2.0 CheckBox – Ryuu 2014-10-09 15:00:12

+0

右键单击一个对象并查看是否在上下文菜单中有条目“格式控制...”。如果是,那么是一个ActiveX。如果不是普通的复选框,或者是传统的复选框(顺便说一下,该文档有多大?)。建议:把Word版本发布给大家看。 – 2014-10-09 15:06:50

回答

0

嵌入文档中的所有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>>) 

其中<<Line>>是要插入(数量),并且<<String>>是要插入的文本。注意不要插入现有的Sub,Function或自定义类型定义(显然)的中间。

+0

是否有可能为它动态设置一个onclick事件处理程序? – Ryuu 2014-10-09 15:26:36

+0

有趣的是,正如你发布的那样,我设法通过反复使用google和head-desking来找到非常相似的代码。当然,你的代码更具信息性,更清洁一些。现在要弄清楚如何只做一次动态代码插入。只是一个简单的问题,是否这是分配复选框的On_Click处理程序的唯一方法? – Ryuu 2014-10-09 15:52:00

+0

@Ryuu号正如我所说的,还有*手册*方式:您右键单击所有控件,然后键入/粘贴代码。这并不像通过程序来添加它们那么有趣,但是你肯定会有更少的麻烦。 :-) – 2014-10-09 15:55:46