【问题标题】:loop ActiveX checkboxes with a variable使用变量循环 ActiveX 复选框
【发布时间】:2021-04-07 12:06:31
【问题描述】:

我在 Word 文档中有许多 ActiveX 复选框,称为“CheckBox1”、“CheckBox2”等。

我有一个私有子,当单击按钮时,它会查看这些复选框,如果选中某些框,它会运行一个宏。如果我使用 me.CheckBox1、me.CheckBox2 等单独访问复选框,则代码可以正常工作,但我希望能够像 me.checkBox[variable] 一样运行一个贯穿它们的循环,但我无法让它工作.有任何想法吗?谢谢!

跟进: 我已经尝试了蒂姆好心放在下面的代码,但是我仍然无法以有意义的方式使用复选框。我已经输入了:

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 并以这种方式对其进行硬编码,但它不喜欢该变量。

【问题讨论】:

  • 如果您有现有的代码,那么最好将其包含在您的帖子中。
  • 谢谢。有效的现有代码是 If Me.CheckBox1.Value = True Then .... 但如果我尝试做 If Me.CheckBox[iCount].Value 或 Me.CheckBox&iCount.Value 或类似的东西它不起作用(其中 iCount 是声明的整数变量)
  • 如果您需要检查从GetControlByName 返回的复选框的值,那么您可以使用(例如在上面的代码中)obj.Value

标签: vba ms-word


【解决方案1】:

没有直接的方法,但是你可以做一个函数来通过名字找到一个控件:

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

【讨论】:

  • 这很棒,可以让我循环查看复选框,但我似乎仍然无法以任何方式使用它们。我想做的是:如果 me.obj.name.Value = True 那么......但我仍然收到错误“找不到方法或数据成员”。
  • 如果您对我发布的内容有后续问题,可以编辑您的问题并将其添加到那里(以及您遇到问题的任何代码)
  • If obj.Value Then
猜你喜欢
  • 2021-07-25
  • 1970-01-01
  • 2014-07-28
  • 2016-09-18
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多