【发布时间】:2011-08-29 13:11:03
【问题描述】:
我目前正在处理几个带有很多复选框的 Excel 工作表。 当您输入一个复选框时,它的名称为 CheckBox1、CheckBox2 等,但是否可以自动重命名它们? 在我的代码中,我现在必须将所有复选框重命名为 Rij11_1、Rij11_2 等。
如果可以逐行自动完成,我会节省很多时间。
有人知道怎么做吗?
非常感谢!
亲切的问候, 马克
【问题讨论】:
我目前正在处理几个带有很多复选框的 Excel 工作表。 当您输入一个复选框时,它的名称为 CheckBox1、CheckBox2 等,但是否可以自动重命名它们? 在我的代码中,我现在必须将所有复选框重命名为 Rij11_1、Rij11_2 等。
如果可以逐行自动完成,我会节省很多时间。
有人知道怎么做吗?
非常感谢!
亲切的问候, 马克
【问题讨论】:
假设复选框位于代号为 Sheet1 的工作表上
Sub test()
Dim obj As OLEObject, ChkBoxRow as long
ChkBoxRow = 1 'Only change checkboxes with topleft corner in row 1
With Sheet1
'Loop AX controls
For Each obj In .OLEObjects
'Check for checkbox only
If TypeName(obj.Object) = "CheckBox" Then
'Examples to identify location (as suggested by Dick Kusleika)
'ChkBoxRow = obj.TopLeftCell.Row
'ChkBoxCol = obj.TopLeftCell.Column
'ChkBoxAdd = obj.TopLeftCell.Address
'ChkBoxRow = obj.BottomRightCell.Row
'ChkBoxCol = obj.BottomRightCell.Column
'ChkBoxAdd = obj.BottomRightCell.Address
'etc
if obj.TopLeftCell.Row = ChkBoxRow then
obj.Name = "Rij11_" & Right(obj.Name, Len(obj.Name) - 8)
end if
End If
Next obj
End With
End Sub
我更新了一个很好的方法Dick Kusleika 指出前几天找到复选框所在的位置。你可以测试If obj.TopLeftCell.Row = 1 Then等
【讨论】:
Right(obj.Name, 1) 更改为 Mid(obj.Name, InStr(obj.Name, "CheckBox") + 8)。