Excel VBA si la feuille de travail ("wsName") existe [dupliquer]

cette question a déjà une réponse ici:

  • essai ou vérification de l'existence d'une feuille 20 réponses

je me demande s'il y a une fonctionnalité clean cut qui retourne True ou False si une feuille de travail dans un classeur existe?

Ce serait bien, mais pas essentiel, s'il est possible de le faire sans sauter la manipulation d'erreur.

la seule chose que j'ai trouvée ne fonctionne pas vraiment:

On Error Resume Next
If (Worksheets("wsName").Name <> "") Then
    Debug.Print "Worksheet exists!"
Else
    Debug.Print "Worksheet doesn't exist!"
End If
On Error GoTo ErrHandler
30
demandé sur Community 2011-05-18 09:13:43

5 réponses

Une version sans gestion d'erreur:

Function sheetExists(sheetToFind As String) As Boolean
    sheetExists = False
    For Each sheet In Worksheets
        If sheetToFind = sheet.name Then
            sheetExists = True
            Exit Function
        End If
    Next sheet
End Function
61
répondu Dante is not a Geek 2016-07-20 20:58:34

Il n'y a pas de fonction intégrée pour cela.

Function SheetExists(SheetName As String, Optional wb As Excel.Workbook)
   Dim s As Excel.Worksheet
   If wb Is Nothing Then Set wb = ThisWorkbook
   On Error Resume Next
   Set s = wb.Sheets(SheetName)
   On Error GoTo 0
   SheetExists = Not s Is Nothing
End Function
26
répondu Tim Williams 2011-05-18 05:47:31

aussi une version légèrement différente. j'ai juste fait une appllication.feuille.comptez pour savoir combien de feuilles de travail j'ai additionallyl. Eh bien, et de mettre un peu de renom dans aswell

Sub insertworksheet()
    Dim worksh As Integer
    Dim worksheetexists As Boolean
    worksh = Application.Sheets.Count
    worksheetexists = False
    For x = 1 To worksh
        If Worksheets(x).Name = "ENTERWROKSHEETNAME" Then
            worksheetexists = True
            'Debug.Print worksheetexists
            Exit For
        End If
    Next x
    If worksheetexists = False Then
        Debug.Print "transformed exists"
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = "ENTERNAMEUWANTTHENEWONE"
    End If
End Sub
6
répondu jogrohs 2016-04-14 12:04:04

Another version de la fonction sans traitement d'erreur. Cette fois, il n'est pas sensible à la casse et un peu plus efficace.

Function WorksheetExists(wsName As String) As Boolean
    Dim ws As Worksheet
    Dim ret As Boolean        
    wsName = UCase(wsName)
    For Each ws In ThisWorkbook.Sheets
        If UCase(ws.Name) = wsName Then
            ret = True
            Exit For
        End If
    Next
    WorksheetExists = ret
End Function
6
répondu Erik K. 2017-12-27 20:26:26

légèrement modifié au code de David Murdoch pour la bibliothèque Générique

Function HasByName(cSheetName As String, _ 
                   Optional oWorkBook As Excel.Workbook) As Boolean

    HasByName = False
    Dim wb

    If oWorkBook Is Nothing Then
        Set oWorkBook = ThisWorkbook
    End If

    For Each wb In oWorkBook.Worksheets
        If wb.Name = cSheetName Then
            HasByName = True
            Exit Function
        End If
    Next wb
End Function
4
répondu ShamBhagwat 2014-06-06 10:02:08