使用循环读取复选框值(Microsoft Word VBA)

时间:2015-02-06 04:06:36

标签: vba checkbox

我目前正在尝试编写一个宏(Word中的VBA),它将信息从一组文档编译成一个文档。

我命令这样做我有一个~20个复选框的列表,它将确定我想要包含在编译中的文档。我的问题是,在编写宏时,我无法找到一种方法来检查列表中每个复选框的状态,而无需重新编写相同的代码块20次,只更改复选框的名称。例如每次CB1到CB2,CB3 CB4等。

这是有问题的代码块。如果我为更改复选框编号多次重写它,它确实有效,但我更喜欢它在循环中,所以代码更紧凑和健壮:

If ThisDocument.CB1.Value = True Then

Documents.Open(directory).Activate
Selection.WholeStory
Selection.Copy
Documents(NewFile).Activate
Selection.Paste
Documents("file.docx").Close

End If

理想情况下,我希望复选框的名称类似于CBn,其中n是一个变量,我可以在每个循环结束时重新定义。

1 个答案:

答案 0 :(得分:0)

没有通过名称直接引用控件的选项 - 你可以将它包装在一个函数中:

Sub Tester()
    Dim x As Long, cb As Object
    For x = 1 To 3
        'find the checkbox
        Set cb = ControlByName("CB" & x, ThisDocument)
        'check we got something back
        If Not cb Is Nothing Then
            Debug.Print "CB" & x & " is " & cb.Value
        End If
    Next x
End Sub

Function ControlByName(sName, doc As Document) As Object
    Dim obj
    For Each obj In doc.InlineShapes
        If obj.OLEFormat.Object.Name = sName Then
            Set ControlByName = obj.OLEFormat.Object
            Exit Function
        End If
    Next obj
End Function