Excel 检查工作表是否存在

Excel 检查工作表是否存在,excel,vba,Excel,Vba,我想检查名为“test”的工作表是否存在,如果不存在,则创建该工作表并将其命名为“test” 如果它存在,我将运行一个单独的代码块,但我没有在这里列出它。我使用了错误处理,因为如果发生错误,它会忽略错误 If Sheets("test").Name = "" Then 'MsgBox Sheets("test").Name & "Name" .Worksheets.Add After:=ThisWorkbook.Worksheets("test2") .Act

我想检查名为“test”的工作表是否存在,如果不存在,则创建该工作表并将其命名为“test”

如果它存在,我将运行一个单独的代码块,但我没有在这里列出它。我使用了错误处理,因为如果发生错误,它会忽略错误

If Sheets("test").Name = "" Then  
'MsgBox Sheets("test").Name & "Name"  
.Worksheets.Add         After:=ThisWorkbook.Worksheets("test2")  
.ActiveSheet.Name = "test"  
End If  
无论我做什么,这段代码总是运行并创建一个新的工作表

如果工作表“test”不存在,代码将正常运行。它会创建一个新的工作表并重命名它,然后继续。显然,在另一种情况下,它不会重命名工作表,因为已经有另一个工作表“test”具有相同的名称。

尝试以下操作:

Function IsExists(name As String, Optional wb As Workbook) As Boolean
    Dim sheet As Worksheet

     If wb Is Nothing Then Set wb = ThisWorkbook
     On Error Resume Next
     Set sht = wb.Sheets(name)
     On Error GoTo 0
     IsExists = Not sheet Is Nothing
 End Function

实现这一点的一种稍微不同的方法是创建一个工作表名称字典

然后,可以使用exists函数测试图纸是否存在

Dim sheetNames As Object
Dim ws As Worksheet

' Create and populate dictionary
Set sheetNames = CreateObject("Scripting.Dictionary")
For Each ws In ThisWorkbook.Sheets
    sheetNames.Add ws.Name, ws.Index
Next ws

' Test if sheet exists
If Not sheetNames.Exists("test") Then
    ' If not add to workbook
    ThisWorkbook.Worksheets.Add(after:=ThisWorkbook.Worksheets("test2")).Name = "test"
    ' add sheet to dictionary
    sheetNames.Add "test", ThisWorkbook.Worksheets("test").Index
End If

如果您对VBA不太熟悉,可以使用以下功能而不是函数:

Sub checkSheet()
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "MySheet" Then
            exists = True
        End If
    Next i

    If Not exists Then
        Worksheets.Add.Name = "MySheet"
    End If
End Sub

不太清楚为什么要添加其他工作表,但我会使用和外部函数检查工作表是否存在

我还将为“test2”添加一些错误检查,因此这里有一些代码,您应该能够进行调整

Sub Test()
    Dim wsName As String: wsName = "test"
    If Not WorkSheetExists(wsName) Then Worksheets.Add().Name = wsName
    If WorkSheetExists("test2") Then Worksheets(wsName).Move _
        After:=ThisWorkbook.Worksheets("test2")
End Sub

Function WorkSheetExists(ByVal strName As String) As Boolean
   On Error Resume Next
   WorkSheetExists = Not ActiveWorkbook.Worksheets(strName) Is Nothing
End Function
*编辑*

已更新函数以指定应测试的工作簿


如果OP对vba的了解有限,您将如何将您刚刚发布的内容与OP试图对其代码执行的操作结合起来?我将此作为加号-您传递工作表名称和工作簿参考,而不是依次查看每张工作表@Scott它将返回真/假-因此
如果不是IsExists(“Sheet1”),那么
@DarrenBartrup Cook,我知道如何使用它,但是为了得到一个好的答案,它需要向OP展示如何从sub引用函数。不起作用。尝试了这个方法,也尝试了for(遍历所有工作表),基本上他们什么都不做。它根本不靠近wsname表。
Function WorkSheetExists(ByVal SheetName As String, Optional ByRef WorkbookToTest As Workbook) As Boolean
   On Error Resume Next
   If WorkbookToTest Is Nothing Then Set WorkbookToTest = ThisWorkbook
   WorkSheetExists = Not WorkbookToTest.Worksheets(SheetName) Is Nothing
End Function