是否可以在 Excel VBA 中返回复选框的名称?

Posted

技术标签:

【中文标题】是否可以在 Excel VBA 中返回复选框的名称?【英文标题】:Is it possible to return the names of checkboxes in Excel VBA? 【发布时间】:2011-08-26 12:37:06 【问题描述】:

我目前正在处理几个包含数百个复选框的工作表。这些复选框背后的代码工作正常,但我正在寻找一种方法来列出每列复选框的名称,例如,我需要知道 G 列中所有复选框的名称。

有人知道这是否可行吗?

提前非常感谢!

【问题讨论】:

【参考方案1】:

考虑使用 TopLeftCell 属性

Sub ListCheckBoxes()

    Dim ole As OLEObject

    'Loop through all the active x controls
    For Each ole In Sheet1.OLEObjects
        'Only care about checkboxes
        If TypeName(ole.Object) = "CheckBox" Then
            'Check topleftcell property
            If ole.TopLeftCell.Column = Sheet1.Range("G1").Column Then
                'print out list
                Debug.Print ole.TopLeftCell.Address, ole.Name
            End If
        End If
    Next ole

End Sub

【讨论】:

我喜欢你使用TypeNameTopLeftCell 的方式。一个不错的、干净的解决方案,看起来很健壮【参考方案2】:

如果您将控件与 G 列对齐(按住 ALT 同时移动对齐)选择属性并找出控件的左侧位置

然后您可以使用此代码来识别来自Sheet1 的哪些控件的左对齐等于您需要的。

Sub test()
lngcolumnGLeft = 288 'pseudo position of object aligned to column G

'cycle through all objects
With Sheet1

    For Each obj In .OLEObjects
        If obj.Left = lngcolumnGLeft Then

            .Range("G" & .Rows.Count).End(xlUp).Offset(1, 0).Value = obj.Name

        End If
    Next obj

End With

End Sub

【讨论】:

【参考方案3】:

如果您指定要检查的列,则下面的代码将起作用。

例如,如果要搜索 E 列中的所有复选框,请指定 5,代码会检查位于 E 列和 F 列最左侧范围内的任何复选框。

Sub ListCheckBoxNames()
    Dim col As Long, cb As OLEObject

    col = 5 //e.g. A=1, B=2, C=3 etc...you need to change this as appropriate

    For Each cb In Worksheets(1).OLEObjects
        If cb.Left >= Columns(col).Left And cb.Left < Columns(col + 1).Left Then
            Debug.Print cb.Name
        End If
    Next cb
End Sub

【讨论】:

以上是关于是否可以在 Excel VBA 中返回复选框的名称?的主要内容,如果未能解决你的问题,请参考以下文章

更改 Excel 表单复选框名称

动态添加基于工作表名称的新表单控件复选框(Excel VBA)

Excel VBA 复选框英语与法语

excel vba检查命令按钮和复选框是不是存在

在Excel中使用VBA循环复选框非常慢

Excel VBA复选框单击和更改事件相同吗?