Vba 是否可以使用复选框的名称访问其值?
我目前正在使用ActiveX复选框编写Word文档 您可以使用以下代码行访问复选框:Vba 是否可以使用复选框的名称访问其值?,vba,ms-word,activex,Vba,Ms Word,Activex,我目前正在使用ActiveX复选框编写Word文档 您可以使用以下代码行访问复选框: ActiveDocument.InlineShapes(n).OLEFormat.Object 其中n是一个整数,表示该复选框在文档中的位置。不幸的是,如果在复选框之前添加了任何复选框或选项按钮,则该复选框的位置会改变,因此给定的n可以指向不同的复选框 我的问题:有没有办法用复选框的名称(或其他名称,只要不能通过添加新复选框来更改)替换n 提前感谢。不幸的是,ActiveX控件没有名称。最方便的选择是使用标题(
ActiveDocument.InlineShapes(n).OLEFormat.Object
其中n是一个整数,表示该复选框在文档中的位置。不幸的是,如果在复选框之前添加了任何复选框或选项按钮,则该复选框的位置会改变,因此给定的n
可以指向不同的复选框
我的问题:有没有办法用复选框的名称(或其他名称,只要不能通过添加新复选框来更改)替换n
提前感谢。不幸的是,ActiveX控件没有名称。最方便的选择是使用标题(复选框旁边的标签文本)。您必须采取类似于PowerPoint的方法,对每个形状进行投票,以找到符合您标准的形状:
Sub GetCheckBoxValue()
For x = 1 To ActiveDocument.InlineShapes.Count
If ActiveDocument.InlineShapes(x).OLEFormat.Object.Caption = "ActiveX Label Text" Then
CheckboxValue = ActiveDocument.InlineShapes(x).OLEFormat.Object.value
End If
Next x
End Sub
可以检查ActiveX控件的名称,但当控件位于文档表面时,不能将其作为集合的索引值。如果您想这样工作,我建议您使用旧的表单控件(与activeX控件列表在功能区中的位置相同)或复选框类型的内容控件 ActiveX控件位于VBA用户窗体上时,可以通过名称对其进行索引,因为控件是为该环境设计的。Word将它们“包装”在字段代码中,并将其视为图形,因此VBA代码必须经过两层接口才能作为ActiveX控件在文档上访问它们 下面的代码演示如何按ActiveX控件的名称对其进行寻址
- 循环浏览
集合InlineShapes
- 检查类型是否为ActiveX控件
- 检查是否是复选框
- 检查name属性
Sub ActiveXControlByName()
Dim ils As Word.InlineShape
Dim cb As MSForms.CheckBox
For Each ils In ActiveDocument.InlineShapes
If ils.Type = wdInlineShapeOLEControlObject Then
If ils.OleFormat.ClassType = "Forms.CheckBox.1" Then
Set cb = ils.OleFormat.Object
If cb.Name = "cb2" Then
cb.value = False
Exit For
End If
End If
End If
Next
End Sub