sheet not exist does determine vba excel-vba excel-2007 excel

not - if exist vba excel



Excel VBA Si WorkSheet("wsName") existe (5)

Esta pregunta ya tiene una respuesta aquí:

Me pregunto si hay una funcionalidad de corte limpio que devuelva True o False si existe una hoja de trabajo dentro de un libro de trabajo.

Sería bueno, pero no esencial, si es posible hacerlo sin omitir el manejo de errores.

Lo único que he encontrado realmente no funciona:

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


No hay una función incorporada para esto.

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


Otra version de la función sin manejo de errores. Esta vez no distingue entre mayúsculas y minúsculas y es un poco más eficiente.

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


Un poco cambiado al código de David Murdoch para la biblioteca genérica

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


Una versión sin manejo de errores:

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


también una versión ligeramente diferente. Acabo de hacer un appllication.sheets.count para saber cuántas hojas de trabajo tengo también. bien y poner un poco de renombre también

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