主动 sheet 顺序更改名称
Active sheet name change in sequence
我有一个工作簿,其中包含两个名为 "WT-1" 和 "CL-1" 的传播sheet(它们可能有更多不同的名称)。
当 "WT-1" 处于活动状态时,我希望能够(通过使用分配有宏的按钮)复制当前(活动)传播 sheet 并按顺序重命名它,如 WT-2, WT-3、WT-4 等。
我想更改只需要应用于名字包含 "WT-" 的 spreadsheet,因为名字更改应该只针对新的 sheet。不应触及所有其他现有作品sheet。在这里 - 请帮忙 :) 它更改了一个新点差的名称sheet。如果我的工作簿中不止有 1 个作业sheet,则它不起作用。
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
假设宏只是更改新复制的传播的名称sheet。因此,如果我复制 WT-2 并创建新的 sheet 命名为 WT-2(2) 和 运行 宏 - 它会起作用并将新的 sheet 名称更改为 WT-1(作为名字在 'wslist') 的范围内。这似乎没问题。但是,如果我的工作簿中有任何其他传播 sheet(活动 sheet 和已经复制的新 sheet 除外)它不起作用并给我一个错误 1004 - "Cannot rename a sheet to the same name as another sheet, a referenced object library or a workbook referenced by Visual Basic"
当我点击 de-bag 时,我发现突出显示:ws.Name = shtName(i)
问题是如果您遇到以下 sheets
的情况
WT-1
WT-1 (2)
WT-2
您的代码试图将 WT-1 (2)
重命名为 WT-2
但该名称已经存在。
所以您可能需要先将它们重命名为其他名称,例如
WT-1
#WT-2
#WT-3
然后在另一个循环中删除 #
。
这样可以防止重命名为已经存在的名称。
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 指出的那样,测试您是否属于 sheet 个名字中的 运行 可能是个好主意。
我有一个工作簿,其中包含两个名为 "WT-1" 和 "CL-1" 的传播sheet(它们可能有更多不同的名称)。
当 "WT-1" 处于活动状态时,我希望能够(通过使用分配有宏的按钮)复制当前(活动)传播 sheet 并按顺序重命名它,如 WT-2, WT-3、WT-4 等。
我想更改只需要应用于名字包含 "WT-" 的 spreadsheet,因为名字更改应该只针对新的 sheet。不应触及所有其他现有作品sheet。在这里 - 请帮忙 :) 它更改了一个新点差的名称sheet。如果我的工作簿中不止有 1 个作业sheet,则它不起作用。
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
假设宏只是更改新复制的传播的名称sheet。因此,如果我复制 WT-2 并创建新的 sheet 命名为 WT-2(2) 和 运行 宏 - 它会起作用并将新的 sheet 名称更改为 WT-1(作为名字在 'wslist') 的范围内。这似乎没问题。但是,如果我的工作簿中有任何其他传播 sheet(活动 sheet 和已经复制的新 sheet 除外)它不起作用并给我一个错误 1004 - "Cannot rename a sheet to the same name as another sheet, a referenced object library or a workbook referenced by Visual Basic" 当我点击 de-bag 时,我发现突出显示:ws.Name = shtName(i)
问题是如果您遇到以下 sheets
的情况WT-1
WT-1 (2)
WT-2
您的代码试图将 WT-1 (2)
重命名为 WT-2
但该名称已经存在。
所以您可能需要先将它们重命名为其他名称,例如
WT-1
#WT-2
#WT-3
然后在另一个循环中删除 #
。
这样可以防止重命名为已经存在的名称。
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 指出的那样,测试您是否属于 sheet 个名字中的 运行 可能是个好主意。