使用循环读取复选框值(Microsoft Word VBA)
问题描述:
我目前正在尝试编写一个宏(Word中的VBA),它可以将文档集合中的信息编译为单个文档。使用循环读取复选框值(Microsoft 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是我可以在每个循环结束时重新定义的变量。
答
有直接提到它的名字控制任何选项 - 你可以用,最多的功能,但:
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