我目前正在尝试编写一个宏(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是一个变量,我可以在每个循环结束时重新定义。
答案 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