Vba 是否可以使用复选框的名称访问其值?

Vba 是否可以使用复选框的名称访问其值?,vba,ms-word,activex,Vba,Ms Word,Activex,我目前正在使用ActiveX复选框编写Word文档 您可以使用以下代码行访问复选框: ActiveDocument.InlineShapes(n).OLEFormat.Object 其中n是一个整数,表示该复选框在文档中的位置。不幸的是,如果在复选框之前添加了任何复选框或选项按钮,则该复选框的位置会改变,因此给定的n可以指向不同的复选框 我的问题:有没有办法用复选框的名称(或其他名称,只要不能通过添加新复选框来更改)替换n 提前感谢。不幸的是,ActiveX控件没有名称。最方便的选择是使用标题(

我目前正在使用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控件的名称,但当控件位于文档表面时,不能将其作为集合的索引值。如果您想这样工作,我建议您使用旧的表单控件(与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