您可以使用复选框的名称来访问其值吗?
Can you use the name of a Check-box to access its value?
我目前正在处理带有 ActiveX 复选框的 Word 文档。
您可以使用以下代码行来访问复选框:
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 控件的名称,但当控件在文档表面时不能作为集合的索引值。如果你想像那样工作,我建议使用旧版 Forms 控件(功能区中与 activeX 控件列表相同的位置)或 Checkbox 类型的内容控件。
当控件位于 VBA 用户窗体上时,ActiveX 控件可以按名称索引,因为控件是为该环境设计的。 Word "wraps" 将它们放在域代码中并将它们视为图形,因此 VBA 代码必须经过几层接口才能在文档上将它们作为 ActiveX 控件访问。
以下代码演示了如何通过名称对 ActiveX 控件进行寻址。
- 遍历
InlineShapes
集合
- 检查类型是否为ActiveX控件
- 检查是否为复选框
- 检查姓名属性
代码:
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
我目前正在处理带有 ActiveX 复选框的 Word 文档。
您可以使用以下代码行来访问复选框:
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 控件的名称,但当控件在文档表面时不能作为集合的索引值。如果你想像那样工作,我建议使用旧版 Forms 控件(功能区中与 activeX 控件列表相同的位置)或 Checkbox 类型的内容控件。
当控件位于 VBA 用户窗体上时,ActiveX 控件可以按名称索引,因为控件是为该环境设计的。 Word "wraps" 将它们放在域代码中并将它们视为图形,因此 VBA 代码必须经过几层接口才能在文档上将它们作为 ActiveX 控件访问。
以下代码演示了如何通过名称对 ActiveX 控件进行寻址。
- 遍历
InlineShapes
集合 - 检查类型是否为ActiveX控件
- 检查是否为复选框
- 检查姓名属性
代码:
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