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

问题描述 投票:0回答:2

我目前正在使用ActiveX复选框处理Word文档。

您可以使用以下代码行访问复选框:

ActiveDocument.InlineShapes(n).OLEFormat.Object

其中n是一个整数,代表该复选框在文档中的位置。对我来说不幸的是,如果在复选框之前添加了任何复选框或选项按钮,则该复选框的位置会更改,因此给定的n可以指向其他复选框。

我的问题:是否有办法用复选框的名称(或只要不能通过添加新复选框而无法更改的其他方式)替换n

先谢谢您。

vba ms-word activex
2个回答
0
投票

可以检查ActiveX控件的名称,但是当控件在文档表面上时,不能将其作为集合的索引值。如果您想那样工作,我建议您使用旧的Forms控件(在Ribbon中与activeX控件列表相同的位置)或Checkbox类型的内容控件。

ActiveX控件可以在控件位于VBA用户窗体上时通过名称进行索引,因为这是控件设计的环境。 Word将它们“包装”在域代码中,并将其视为图形,因此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

-1
投票

[不幸的是,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
© www.soinside.com 2019 - 2024. All rights reserved.