Excel vba重命名复选框

时间:2011-05-23 13:20:26

标签: excel vba checkbox renaming

我有一个包含许多复选框的工作表。 Excel将这些自动命名为CheckBox1,CheckBox2等...但是,对于我的文档,我需要将它们全部重命名为Rij11_1,Rij11_2等(Rij11是第11行,_1是该行中的第一个复选框,依此类推) 。 重要的是每行重新开始_1。

Stackoverflow成员Osknows和Dave DuPlantis已经帮助我了解这个问题(非常感谢你们所有的帮助),使用以下代码:

Sub test()  
    Dim obj As OLEObject, ChkBoxRow as long  
    ChkBoxRow = 11   
    With Worksteets("Storia") 
    For Each obj In .OLEObjects     
    If TypeName(obj.Object) = "CheckBox" Then          
        if obj.TopLeftCell.Row = ChkBoxRow then            
            obj.Name = "Rij11_" & Right(obj.Name, 1)         
        end if      
    End If 
    Next obj
    End With
End Sub 

但是,每行上的第一个重命名复选框不会从1开始(通常是7,因为某些原因让我失望),如果一行中有超过10个复选框,则编号不会超过10在_9之后,我得到_0而不是_10然后,在_0之后,它再次继续_1,导致行中的名称重复。

有没有人可以帮我解决这个重新编号问题?

非常感谢!

亲切的问候, 马克

2 个答案:

答案 0 :(得分:1)

这是摆脱这些的简单方法。突出显示要删除复选框和关联文本的列。然后使用CTRL + C剪切它们,然后移动到另一张纸上,粘贴它们。 (此方法是,如果您要删除一列复选框但保留另一列,或删除随机复选框)。现在点击F5,然后点击特别,然后点击对象(在你粘贴的页面上删除),它们都将被选中,现在只需剪切它们,完成! :)

答案 1 :(得分:0)

问题在于内部If语句中的Right(obj.Name, 1)。重命名仅将旧对象名称的最右侧字符粘贴到新名称的末尾。尝试使用以下内容替换它:

Right(obj.Name, Len(obj.Name) - 8)

其中8是“CheckBox”的长度。