使用 VBA 根据所选对象更改对象名称

问题描述 投票:0回答:1

此宏的工作原理是选择 2 个对象。先前已命名的对象称为“A”,另一个对象的名称是“随机”。我希望通过这个宏,我可以更改所选对象的名称。如果找到名为 A 的对象,则将另一个对象重命名为“1”。同样,如果找到名为 B 的对象,则将另一个对象重命名为“2”,依此类推

Sub ChangeObjectName()
    Dim sr As ShapeRange
    Dim s As Shape
    
    Set sr = ActiveSelectionRange
    If sr.Count <> 2 Then Exit Sub
    
    For Each s In sr
        If s.Name <> "A" Then
            s.Name = "1"
        End If
    Next s
End Sub

(https://i.stack.imgur.com/37n6h.png)

我尝试将脚本开发成这样,

Sub ChangeObjectName()
    Dim sr As ShapeRange
    Dim s As Shape
    
    Set sr = ActiveSelectionRange
    If sr.Count <> 2 Then Exit Sub
    
    For Each s In sr
        If s.Name <> "A" Then
            s.Name = "1"
        If s.Name <> "B" Then
            s.Name = "2"
        If s.Name <> "C" Then
            s.Name = "3"
        If s.Name <> "D" Then
            s.Name = "4"
        End If
    Next s
End Sub

但是,遇到错误消息, Compile Error, Next without For

我还尝试循环上下文,但遇到了对象名称未按预期更改的问题。如果有人可以帮助我解决这个脚本,我将不胜感激。谢谢你。

vba rename draw coreldraw
1个回答
0
投票
Sub ChangeObjectName()
    Dim sr As ShapeRange
    Dim s As Shape, s2 As Shape, s1 As Shape
    Const START_NAME = "A"
    Const END_NAME = "D"
    
    Set sr = ActiveSelectionRange
    If sr.Count <> 2 Then Exit Sub
    For Each s In sr
        If Len(s.Name) = 1 And s.Name >= START_NAME And s.Name <= END_NAME Then
            Set s1 = s
        Else
            Set s2 = s
        End If
    Next s
    If s1 Is Nothing Or s2 Is Nothing Then
        Exit Sub
    Else
       s2.Name = CStr(Asc(s1.Name) - 64)
    End If
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.