我写了以下代码:
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 张!
它现在所做的是创建这两个工作表,如果我再次运行它,它将尝试创建其他工作表,并且我收到错误消息“名称已被占用。尝试不同的。”
请你帮助我好吗?
最佳答案
您可以将所有工作表名称保存在一个数组中 SheetNamesArr
,然后检查是否在包含所有工作表名称的数组中找到工作表名称,例如“ClientList”。
您可以使用 Application.Match
检查数组中是否已经存在“ClientList”。功能:
If IsError(Application.Match("ClientList", SheetNamesArr, 0)) Then
如果
IsError
将导致 True
这意味着此工作表尚不存在,您可以安全地添加它,否则什么也不做。代码
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
关于VBA - 有/结束仅添加 2 张,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49528224/