是否可以在 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
【讨论】:
我喜欢你使用TypeName
和TopLeftCell
的方式。一个不错的、干净的解决方案,看起来很健壮【参考方案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 中返回复选框的名称?的主要内容,如果未能解决你的问题,请参考以下文章