首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >活动工作表名称按顺序更改

活动工作表名称按顺序更改
EN

Stack Overflow用户
提问于 2018-03-09 09:00:52
回答 1查看 444关注 0票数 1

我有一个工作簿,它有两个电子表格,名为"WT-1“和"CL-1”(可以用diff更多)。姓名)。

当."WT-1“是活动的,我希望能够(通过使用分配给它的宏的按钮)复制这个当前(活动)电子表格,并按顺序重命名它,如WT-2、WT-3、WT-4等等。

我猜更改只需要应用于包含"WT-“的电子表格,因为名称更改应该只针对新的表。不应触及所有其他现有的工作表。这里是- Pls help :)它更改了一个新电子表格的名称。如果我的工作簿中只有一个以上的工作表,它就不能工作。

代码语言:javascript
复制
Sub changeWSname()

Dim ws As Worksheet
Dim shtName As Variant
Dim Rng As Range
Dim i As Long

With Sheets("wslist")
        Set Rng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp).Address)
        shtName = Application.Transpose(Rng)
        i = LBound(shtName)
End With

For Each ws In ActiveWorkbook.Worksheets
If Left(Trim(ws.Name), 3) = "WT-" Then
        ws.Name = shtName(i)
        i = i + 1
      End If
Next ws
End Sub

宏应该只是更改新的和新复制的电子表格的名称。因此,如果我复制WT-2并创建名为WT-2(2)的新工作表并运行宏,它将工作并将新工作表名称更改为WT-1 (在“wslist”的范围内是第一个名称)。那似乎没问题。但是,如果我的工作簿中还有其他电子表格(活动工作表和已复制的新工作表除外),它就不能工作,并给出一个错误1004 --“无法将一个工作表重命名为与Visual引用的另一个工作表、引用对象库或工作簿相同的名称”,当我单击“de”时,我发现了这一点: ws.Name = shtName(i)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-09 10:19:53

问题是如果你有以下情况的话

  • WT-1
  • WT-1 (2)
  • WT-2

您的代码试图将WT-1 (2)重命名为WT-2,但它已经存在。

因此,有一种可能性是,您需要首先将这些重命名为其他的东西,比如

  • WT-1
  • #WT-2
  • #WT-3

然后在另一个循环中删除#

这样可以防止将名称重命名为已经存在的名称。

代码语言:javascript
复制
Option Explicit

Public Sub changeWSname()
    Dim ws As Worksheet
    Dim shtName As Variant
    Dim Rng As Range
    Dim i As Long

    With Sheets("wslist")
        Set Rng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp).Address)
        shtName = Application.Transpose(Rng)
        i = LBound(shtName)
    End With
    For Each ws In ActiveWorkbook.Worksheets
        If Left$(Trim(ws.Name), 3) = "WT-" Then
            'test if we run out of sheet names
            If i > UBound(shtName) Then
                MsgBox "Running out of sheet names … aborting"
                Exit Sub
            End If

            ws.Name = "#" & shtName(i) 'add a # to all new sheet names
            i = i + 1
        End If
    Next ws

    'remove the # from the sheet nam
    For Each ws In ActiveWorkbook.Worksheets
        If Left$(Trim(ws.Name), 1) = "#" Then
            ws.Name = Right$(ws.Name, Len(ws.Name) - 1)
        End If
    Next ws
End Sub

正如QHarr所指出的,测试工作表名称是否用完可能是个好主意。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49190023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档