名称使用VBA新创build的选项卡已存在错误

我尝试在Excel中创buildVBAmacros,其中一个Excel工作表跟踪path并在另一个工作表中创build一个新选项卡。 它工作的很好,但是当我用相同的名称“意外”创build另一个标签时,它给了我错误,因为“名称已经采取尝试另一个”。 我不想再创build一个同名的标签。 相反,它应该阻止我创build具有相同名称的选项卡

反正有没有这个名字已经存在,它给了我一个popup说,名称已经存在我只能得到一个选项可以点击。 我单击确定,并且创build的附加工作表不会保存(或者如果已经创build删除自己或与(2)旁边保存为相同的名称作为Excel通常为重复工作表)。 我正在尝试这样的事情

If wb.ActiveSheet.Name = sName Then wb.ActiveSheet.Delete 

这是我的代码

 Private Sub Filling_List() Dim sPath As String Dim sFile As String Dim wb As Workbook Dim sName As String 'add sName declaration Dim wb1 As Workbook Dim ws1 As Worksheet Set wb1 = ThisWorkbook Set ws1 = ThisWorkbook.Worksheets("S0") Application.ScreenUpdating = False sPath = "C:\Users\arp\Desktop\Filling list macro\" sFile = sPath & "ArF Filling List.xlsm" Set wb = Workbooks.Open(sFile) wb.Worksheets("ArF Templete").Copy After:=Worksheets(Worksheets.Count) sName = ws1.Range("A1") & " " & ws1.Range("T2") wb.ActiveSheet.Name = sName 

'如果wb.ActiveSheet.Name = sName然后wb.ActiveSheet.Delete“我正在尝试,但它不起作用”

 If sName = vbNullString Then Exit Sub 'compare against vbNullstring not empty string literal With wb.Worksheets(sName) .Cells(3, "E") = InputBox("Your Initials:") '.Cells(5, "E") = InputBox("Col?:") .Cells(6, "E") = InputBox("I:") .Cells(7, "E") = InputBox("ET1 B:") .Range("B03") = wb1.Worksheets("Que").Range("B02").Value2 .Range("B04") = wb1.Worksheets("Que").Range("E01").Value2 .Range("B05") = wb1.Worksheets("Que").Range("B01").Value2 .Cells(3, "E") = wb1.Worksheets("Que").Range("E02").Value2 .Cells(5, "E") = "Yes" 'Filling order .Range("B38:B43") = wb1.Worksheets("Que & Tsc Cal").Range("B04:B09").Value2 .Range("C38:C43") = wb1.Worksheets("Que & Tsc Cal").Range("C04:C09").Value2 .Range("D38:D43") = wb1.Worksheets("Que & Tsc Cal").Range("A04:A09").Value2 'Retains End With Application.ScreenUpdating = True End Sub 

我在这里的大家的帮助下开发了以上的版本,并join了其他线程的一些小部分。任何build议,使其更好,是非常受欢迎的。

[W]如果我创build了另一个“意外”的标签,它给了我错误。 。 。 我不想再创build一个同名的标签。 相反,它应该阻止我创build具有相同名称的选项卡

创build制表符的macros不是一个不常见的问题 – 很容易意外地运行它们两次。 为了防止出现这种情况,请首先检查该选项卡是否已存在,并且只有在validation该选项卡不存在后,才能调用Worksheets.Copy方法。

 Private Sub Filling_List() Dim sPath As String Dim sFile As String Dim wb As Workbook Dim sName As String 'add sName declaration Dim wb1 As Workbook Dim ws1 As Worksheet Set wb1 = ThisWorkbook Set ws1 = ThisWorkbook.Worksheets("S0") Application.ScreenUpdating = False sPath = "C:\Users\arp\Desktop\Filling list macro\" sFile = sPath & "ArF Filling List.xlsm" Set wb = Workbooks.Open(sFile) sName = ws1.Range("A1") & " " & ws1.Range("T2") On Error Resume Next Dim wslTest As Worksheet Set wslTest = wb.Worksheets(sName) If Err.Number = 0 Then MsgBox "Tab: " & sName & " already exists.", vbInformation wslTest.Activate Exit Sub End If On Error GoTo 0 wb.Worksheets("ArF Templete").Copy After:=wb.Worksheets(wb.Worksheets.Count) wb.ActiveSheet.Name = sName ' rest of code End Sub 

我使用一个检查,如果命名选项卡/表是可用的:

 If IsError(Evaluate("SHEETNAME!A1")) Then 'Nothing Else Sheets("SHEETNAME").Delete End If Sheets.Add(After:=Sheets(Sheets.Count)).Name = "SHEETNAME" 

或者如斯科特所build议的那样,使它更简单,更清洁:

 If Not IsError(Evaluate("SHEETNAME!A1")) Then Sheets("SHEETNAME").Delete Sheets.Add(After:=Sheets(Sheets.Count)).Name = "SHEETNAME" 

编辑1:

 Application.DisplayAlerts = False If IsError(Evaluate("SHEETNAME!A1")) Then Sheets.Add(After:=Sheets(Sheets.Count)).Name = "SHEETNAME" Application.DisplayAlerts = True 

下面的代码应该做你想要的,你可能需要适应你的项目。

 Option Explicit Sub addsheet() Dim sht As Worksheet Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets.add On Error Resume Next 'Prevent Excel from stopping on an error but just goes to next line ws.Name = "Sheet1" If Err.Number = 1004 Then MsgBox "Worksheet with this name already exists" Application.DisplayAlerts = False 'Prevent confirmation popup on sheet deletion ws.Delete Application.DisplayAlerts = True 'Turn alerts back on On Error GoTo 0 'Stop excel from skipping errors Exit Sub 'Terminate sub after a failed attempt to add sheet End If On Error GoTo 0 'Stop Excel from skipping errors. End Sub