2011-05-16 89 views
2

我目前正在处理几个包含数百个复选框的工作表。这些复选框背后的代码工作正常,但我正在寻找一种方法来列出每列的复选框名称,例如,我需要知道列G中所有复选框的名称。是否可以在Excel VBA中返回复选框的名称?

有谁知道这是可能的吗?

非常感谢!

回答

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 
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 
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 
+0

我喜欢你已经使用'TypeName'和你TopLeftCell'的'使用方式。一个非常干净的解决方案,看起来很健壮 – 2011-05-17 18:03:00