VBA - With/End 仅添加 2 张

VBA - With/End With Add only 2 Sheets

我写了下面的代码:

Sub CreateSheet()
    With ThisWorkbook
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "ClientList"
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "ProviderList"
    End With
End Sub

我的问题如下:在代码创建了两个工作表之后,我希望它停止并且不创建其他工作表,即使我再次 运行 它也是如此。我要加2张而且只有2张!
它现在所做的是创建这两个工作表,如果我再次 运行 它会尝试创建其他工作表,我收到错误消息说 "The name is already taken. Try a different one." 请你帮助我好吗?

您可以将所有工作sheet 名称保存在数组 SheetNamesArr 中,然后检查是否在数组中找到 sheet 名称,例如 "ClientList"拥有所有 sheet 个名字。

您可以使用Application.Match函数检查"ClientList"是否已经存在于数组中:

If IsError(Application.Match("ClientList", SheetNamesArr, 0)) Then

如果IsError结果为True,则表示此作品sheet还不存在,您可以放心添加,否则什么都不做。

代码

Option Explicit

Sub CreateSheet()

Dim i As Long
Dim SheetNamesArr() As String

ReDim SheetNamesArr(100) ' redim to large size, will optimize size later

For i = 1 To ThisWorkbook.Sheets.Count
    SheetNamesArr(i - 1) = ThisWorkbook.Sheets(i).Name
Next i
ReDim Preserve SheetNamesArr(0 To i - 2) ' resize to size of populated sheet names

With ThisWorkbook
    ' using Match, means if IsError sheet name not found in current array of sheet names >> you can add it
    If IsError(Application.Match("ClientList", SheetNamesArr, 0)) Then
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "ClientList"
    End If
    ' same as previous Match
    If IsError(Application.Match("ProviderList", SheetNamesArr, 0)) Then
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "ProviderList"
    End If
End With

End Sub

这是不同的方法:

Sub CreateSheet()
    Dim sh As Worksheet
    For Each sh In Sheets
        'if we have already sheet with given name, then exit sub (means no adding new sheets)
        If sh.Name = "ClientList" Or sh.Name = "ProviderList" Then
            Exit Sub
        End If
    Next
    Sheets.Add(After:=Sheets(Sheets.Count)).Name = "ClientList"
    Sheets.Add(After:=Sheets(Sheets.Count)).Name = "ProviderList"
End Sub

没有必要使用 With ThisWorkbook,因为这是在不使用工作簿引用时使用的默认工作簿。