Excel重命名工作表,如果工作表名称已存在
如果名称已存在,如何重命名图纸并在名称末尾添加数字Excel重命名工作表,如果工作表名称已存在,excel,vba,Excel,Vba,如果名称已存在,如何重命名图纸并在名称末尾添加数字 VBA_BlankBidSheet.Copy After:=ActiveSheet ActiveSheet.Name = "New Name" 我正在使用此代码,但如果名称已存在,则需要在工作表名称的末尾添加一个数字 VBA_BlankBidSheet.Copy After:=ActiveSheet ActiveSheet.Name = "New Name" 下面的代码循环浏览此工作簿中的所有工作表,并检查是否已经有一个名为“New nam
VBA_BlankBidSheet.Copy After:=ActiveSheet
ActiveSheet.Name = "New Name"
我正在使用此代码,但如果名称已存在,则需要在工作表名称的末尾添加一个数字
VBA_BlankBidSheet.Copy After:=ActiveSheet
ActiveSheet.Name = "New Name"
下面的代码循环浏览
此工作簿中的所有工作表
,并检查是否已经有一个名为“New name”的工作表,如果已经有,则在末尾添加一个数字
Sub RenameSheet()
Dim Sht As Worksheet
Dim NewSht As Worksheet
Dim VBA_BlankBidSheet As Worksheet
Dim newShtName As String
' modify to your sheet's name
Set VBA_BlankBidSheet = Sheets("Sheet1")
VBA_BlankBidSheet.Copy After:=ActiveSheet
Set NewSht = ActiveSheet
' you can change it to your needs, or add an InputBox to select the Sheet's name
newShtName = "New Name"
For Each Sht In ThisWorkbook.Sheets
If Sht.Name = "New Name" Then
newShtName = "New Name" & "_" & ThisWorkbook.Sheets.Count
End If
Next Sht
NewSht.Name = newShtName
End Sub
新工作簿上的测试程序将生成以下工作表名称: 表1\u 1、表2\u 1和ABC 如果Sheet1_1存在,我们要求提供新的Sheet1,它将返回Sheet1_2,因为新工作簿中不存在ABC,它将返回ABC 测试代码添加了一个名为“DEF”的新表。如果您再次运行它,它将创建“DEF_1”
Sub Test()
Debug.Print RenameSheet("Sheet1")
Debug.Print RenameSheet("Sheet2")
Debug.Print RenameSheet("ABC")
Dim wrkSht As Worksheet
Set wrkSht = Worksheets.Add
wrkSht.Name = RenameSheet("DEF")
End Sub
Public Function RenameSheet(SheetName As String, Optional Book As Workbook) As String
Dim lCounter As Long
Dim wrkSht As Worksheet
If Book Is Nothing Then
Set Book = ThisWorkbook
End If
lCounter = 0
On Error Resume Next
Do
'Try and set a reference to the worksheet.
Set wrkSht = Book.Worksheets(SheetName & IIf(lCounter > 0, "_" & lCounter, ""))
If Err.Number <> 0 Then
'If an error occurs then the sheet name doesn't exist and we can use it.
RenameSheet = SheetName & IIf(lCounter > 0, "_" & lCounter, "")
Exit Do
End If
Err.Clear
'If the sheet name does exist increment the counter and try again.
lCounter = lCounter + 1
Loop
On Error GoTo 0
End Function
子测试()
调试。打印重命名表(“表1”)
调试。打印重命名表(“表2”)
调试。打印重命名页面(“ABC”)
Dim wrkSht As工作表
Set wrkSht=工作表。添加
wrkSht.Name=RenameSheet(“DEF”)
端接头
公共函数将SheetSheet(SheetName作为字符串,可选书本作为工作簿)重命名为字符串
暗淡的长计数器
Dim wrkSht As工作表
如果书什么都不是的话
Set Book=此工作簿
如果结束
lCounter=0
出错时继续下一步
做
'尝试设置对工作表的引用。
Set wrkSht=Book.Worksheets(图纸名称和IIf(lCounter>0,“\u”“和lCounter,”))
如果错误号为0,则
'如果发生错误,则工作表名称不存在,我们可以使用它。
重命名Sheet=SheetName&IIf(lCounter>0,“\u”“和lCounter,”)
退出Do
如果结束
呃,明白了
'如果工作表名称确实存在,请递增计数器并重试。
l计数器=l计数器+1
环
错误转到0
端函数
编辑:删除了
Do,而bNotExists
,因为我没有检查bNotExists
——只需使用Exit Do
。基于Darren的答案,我认为立即重命名工作表可能更容易,而不是返回可以使用的名称。我也进行了一些重构。以下是我的看法:
Private Sub nameNewSheet(sheetName As String, newSheet As Worksheet)
Dim named As Boolean, counter As Long
On Error Resume Next
'try to name the sheet. If name is already taken, start looping
newSheet.Name = sheetName
If Err Then
If Err.Number = 1004 Then 'name already used
Err.Clear
Else 'unexpected error
GoTo nameNewSheet_Error
End If
Else
Exit Sub
End If
named = False
counter = 1
Do
newSheet.Name = sheetName & counter
If Err Then
If Err.Number = 1004 Then 'name already used
Err.Clear
counter = counter + 1 'increment the number until the sheet can be named
Else 'unexpected error
GoTo nameNewSheet_Error
End If
Else
named = True
End If
Loop While Not named
On Error GoTo 0
Exit Sub
nameNewSheet_Error:
'add errorhandler here
End Sub
net版本的VB使用Try。。。Catch公式要捕获运行时错误,请参见{}(),以获取与VB6及其之前的旧“on error”公式的比较。它更适合做您想做的事情,并且将在imho中进行更短的异常运行
我试图找出在尝试重命名为现有sheetname时引发的异常,并将在这里编辑为一个可行的脚本 如果它是递增的,而不是追加
“\u 1”
,这样您将得到Sheet1,Sheet2,Sheet3…
,而不是Sheet\u 1,Sheet\u 1,Sheet\u 1
。如果有多张具有相同名称的工作表,您将很快达到字符限制让我知道我下面回答中的代码是否是您的意思