使用变量循环 ActiveX 复选框
loop ActiveX checkboxes with a variable
我在一个 Word 文档中有许多名为 'CheckBox1'、'CheckBox2' 等的 ActiveX 复选框
我有一个私人子程序,当单击一个按钮时,它会查看这些复选框,如果勾选了某些复选框,它 运行 就是一个宏。如果我使用 me.CheckBox1、me.CheckBox2 等单独访问复选框,代码工作正常,但我希望能够 运行 一个循环 运行 像 me.checkBox[变量],但我无法让它工作。有任何想法吗?谢谢!
跟进:
我已经尝试了蒂姆亲切地放在下面的代码,但是我仍然无法以有意义的方式使用复选框。我已经输入:
Sub checkCheckBox()
Dim obj, i As Long
Dim boxName As String
For i = 1 To 10
Set obj = GetControlByName(ThisDocument, "CheckBox" & i)
boxName = obj.Name
If ThisDocument.boxName.Value = True Then
.... ' do something
End If
Next i
End Sub
如果我使用 ThisDocument.CheckBox1.Value 并按此方式对其进行硬编码,但它不喜欢该变量。
没有直接的方法,但你可以创建一个函数来按名称查找控件:
Sub Tester()
Dim obj, i As Long
For i = 1 to 10
Set obj = GetControlByName(ThisDocument, "CheckBox" & i)
Debug.Print obj.Name 'do something with the checkbox...
Next i
End Sub
Function GetControlByName(doc As Document, nm As String) As Object
Dim obj, rv As Object
For Each obj In doc.InlineShapes
If Not obj.OLEFormat Is Nothing Then
If obj.OLEFormat.Object.Name = nm Then
Set GetControlByName = obj.OLEFormat.Object
Exit Function
End If
End If
Next obj
End Function
我在一个 Word 文档中有许多名为 'CheckBox1'、'CheckBox2' 等的 ActiveX 复选框
我有一个私人子程序,当单击一个按钮时,它会查看这些复选框,如果勾选了某些复选框,它 运行 就是一个宏。如果我使用 me.CheckBox1、me.CheckBox2 等单独访问复选框,代码工作正常,但我希望能够 运行 一个循环 运行 像 me.checkBox[变量],但我无法让它工作。有任何想法吗?谢谢!
跟进: 我已经尝试了蒂姆亲切地放在下面的代码,但是我仍然无法以有意义的方式使用复选框。我已经输入:
Sub checkCheckBox()
Dim obj, i As Long
Dim boxName As String
For i = 1 To 10
Set obj = GetControlByName(ThisDocument, "CheckBox" & i)
boxName = obj.Name
If ThisDocument.boxName.Value = True Then
.... ' do something
End If
Next i
End Sub
如果我使用 ThisDocument.CheckBox1.Value 并按此方式对其进行硬编码,但它不喜欢该变量。
没有直接的方法,但你可以创建一个函数来按名称查找控件:
Sub Tester()
Dim obj, i As Long
For i = 1 to 10
Set obj = GetControlByName(ThisDocument, "CheckBox" & i)
Debug.Print obj.Name 'do something with the checkbox...
Next i
End Sub
Function GetControlByName(doc As Document, nm As String) As Object
Dim obj, rv As Object
For Each obj In doc.InlineShapes
If Not obj.OLEFormat Is Nothing Then
If obj.OLEFormat.Object.Name = nm Then
Set GetControlByName = obj.OLEFormat.Object
Exit Function
End If
End If
Next obj
End Function