簡體   English   中英

檢查工作表是否存在

[英]Check if sheet exists

我想檢查名為“test”的工作表是否存在,如果不存在,則創建該工作表並將其命名為“test”。

如果它存在,我運行一個單獨的代碼塊,我沒有在這里放。 我使用了錯誤處理,因為如果發生錯誤,它會忽略錯誤。

If Sheets("test").Name = "" Then  
'MsgBox Sheets("test").Name & "Name"  
.Worksheets.Add         After:=ThisWorkbook.Worksheets("test2")  
.ActiveSheet.Name = "test"  
End If  

無論我做什么,這部分代碼總是會運行並創建一個新工作表。

如果工作表“test”不存在,則代碼運行正常。 它創建一個新工作表並重命名它並繼續。 顯然,在另一種情況下它不會重命名工作表,因為已經有另一個同名的工作表“測試”。

如果您不太熟悉 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

* 編輯 *

更新函數以指定應測試哪個工作簿

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

實現此目的的一種稍微不同的方法是創建工作表名稱的字典。

然后就可以使用exists函數來測試sheet是否存在

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

嘗試這個 :

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM