VBA - 有/结束仅添加 2 张

标签 vba excel with-statement

我写了以下代码:

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/

相关文章:

vba - 如何从代码中删除 Excel VBA 的 $ 符号

VBA:如何在 <td> 标签中获取隐藏的href

java - 如何创建和写入 Excel 文件 (.xlsx)?

vba - 只复制VBA中的可见范围?

sql - WITH 是否创建一个临时表,如果可以,它可以安全地用于多个线程吗?

arrays - Redim Preserve 给出 'subscript out of range'

ms-access - 使用 Access VBA 中的代码自动生成文本框

html - Excel VBA 代码 - 修改以获取不同页面中的其他表格?

javascript - 设置 'with' 语句引用的字段和对象

python - with 语句 - Python 2.5 的反向移植