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

Eri*_*ric 1 excel vba excel-vba

我试图在excel中创建VBA宏,其中一个Excel工作表跟踪路径并在另一个工作表中创建一个新选项卡.它工作得很好,但是当我"意外地"使用相同名称创建另一个标签时,它会给出错误,因为"名称已经尝试了另一个".我不想再创建一个具有相同名称的选项卡.相反,它应该阻止我创建具有相同名称的选项卡

无论如何,如果那个名字已经存在,它会给我一个弹出窗口,说名字已经存在我只有一个选项可以点击.我单击"确定",并且创建的附加工作表不会被保存(或者如果已经创建,则会删除自身,或者将其保存为旁边的(2)同名,因为excel通常会对重复工作表执行此操作).我正在尝试这样的事情

If wb.ActiveSheet.Name = sName Then wb.ActiveSheet.Delete
Run Code Online (Sandbox Code Playgroud)

这是我的代码

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
Run Code Online (Sandbox Code Playgroud)

'如果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
Run Code Online (Sandbox Code Playgroud)

我在这里的帮助下开发了上面的版本,并加入了其他线程的零碎件.任何使其更好的建议都是非常受欢迎的.

Cyr*_*ril 5

我使用检查命名选项卡/表是否可用:

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

或者按照Scott的建议让它更简单,更清洁:

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

编辑1:

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

  • 我也有一些. (2认同)