您可以使用复选框的名称来访问其值吗?

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