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

时间:2011-05-16 14:52:13

标签: excel vba checkbox

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

有人知道这是否可行?

提前多多感谢!

3 个答案:

答案 0 :(得分:3)

考虑使用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

答案 1 :(得分:2)

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

例如,如果要搜索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

答案 2 :(得分:1)

如果将控件与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