是否有可能在Excel VBA中返回checkbox的名称?

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

有谁知道这是可能的吗?

提前感谢!

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

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

例如,如果要searchE列中的所有checkbox,则指定5 ,代码将检查位于列E和列F的最左边界内的任何checkbox。

 Sub ListCheckBoxNames() Dim col As Long, cb As OLEObject col = 5 //eg 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 

如果将控件与G列alignment(按住ALT同时移动以alignment),请select属性并找出控件的左侧位置

然后,您可以使用此代码来确定Sheet1哪些控件保持与您所需的alignment方式相同。

 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