我目前正在使用包含数百个复选框的几个工作表。这些复选框后面的代码工作正常,但我正在寻找一种方法来列出每列复选框的名称,例如,我需要知道G列中所有复选框的名称。
有人知道这是否可行?
提前多多感谢!
答案 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