我目前正在处理几个包含数百个复选框的工作表。这些复选框背后的代码工作正常,但我正在寻找一种方法来列出每列的复选框名称,例如,我需要知道列G中所有复选框的名称。是否可以在Excel VBA中返回复选框的名称?
有谁知道这是可能的吗?
非常感谢!
我目前正在处理几个包含数百个复选框的工作表。这些复选框背后的代码工作正常,但我正在寻找一种方法来列出每列的复选框名称,例如,我需要知道列G中所有复选框的名称。是否可以在Excel VBA中返回复选框的名称?
有谁知道这是可能的吗?
非常感谢!
如果对齐控制列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
如果您指定要检查的列,下面的代码将起作用。
举例来说,如果你要搜索列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
考虑使用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
我喜欢你已经使用'TypeName'和你TopLeftCell'的'使用方式。一个非常干净的解决方案,看起来很健壮 – 2011-05-17 18:03:00