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
,因为这是在不使用工作簿引用时使用的默认工作簿。
我写了下面的代码:
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
,因为这是在不使用工作簿引用时使用的默认工作簿。