在VBA中重命名工作表

我在VBA中重命名工作表时遇到问题。

我正在写一个Sub,需要检查工作簿中是否有一个工作表,它有一个特定的名字,如果没有,就用这个名字创build一个新工作表。 我得到运行时错误1004应用程序定义或对象定义的错误。 我希望任何人都可以帮助我。 这是我的代码:

Dim ws As Worksheet Dim ArrayElement As Variant Dim Current_Tabs(1 To 10) As String NumberNewTab = 1 Tab_Name_Current_Game = Echt_team1 + "vs. " + Echt_team2 For Each ws In Worksheets 'For every worksheet in this workbook Found = False For Each ArrayElement In Current_Tabs array If Tab_Name_Current_Game = ArrayElement Then Worksheets(ws).Activate Worksheets.Select Found = True End If Next ArrayElement If Found = False Then Worksheets.Add Sheets(1).Name = Tab_Name_Current_Game **'Here I get the error** Current_Tabs(NumberNewTab) = Tab_Name_Current_Game NumberNewTab = NumberNewTab + 1 End If Next ws 

如果我使用Sheets(1).Name = "Test"那么我不会遇到错误。 我不明白为什么这会成为VBA的问题。 希望有人能帮助我。 谢谢!

你从来没有定义过Tab_Name_Current_Game 。 将Dim Tab_Name_Current_Game as String添加为您的声明在顶部的Dim Tab_Name_Current_Game as String 。 然后看看会发生什么。

你可以更容易:

 Public Sub renameSheet() Dim wb As Excel.Workbook Dim ws As Excel.Worksheet Dim Tab_Name_Current_Game As String Set wb = Excel.ActiveWorkbook 'The line below is copied from your code, but I don't like it. 'You should pass Echt_team1 and Echt_team2 as input parameters to this Sub. Tab_Name_Current_Game = Echt_team1 + "vs. " + Echt_team2 On Error Resume Next Set ws = wb.Worksheets(Tab_Name_Current_Game) On Error GoTo 0 If ws Is Nothing Then Set ws = wb.Worksheets.Add ws.Name = Tab_Name_Current_Game End If End Sub 

为了使代码更加可靠,您也可以将此函数添加到您的代码中: 检查工作表名称是否有效的函数 ,并更改以下行:

  ws.Name = Tab_Name_Current_Game 

  ws.Name = legalSheetName(Tab_Name_Current_Game) 

这将确保您试图分配给工作表的名称不会太长,并且没有非法字符。