es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Referirse a las Hojas por Número de Índice

Tengo varias hojas en mi libro de trabajo.

Cuando escribo sheet5.Name devuelve el nombre de la hoja, digamos “BOOK”.

Cuando escribo sheets(“BOOK”).Index devuelve otro número. Si el número 5 es el número de esta hoja, ¿por qué no devuelve 5?

Escribí una función para obtener el número de hoja, tengo los nombres de las hojas y quiero obtener sus números. Cuando lo compruebo, veo que los números que devuelve no son como espero.

Function shtNum(ByVal shtName As String) As Integer
    ' declaraciones
    Dim Wks As Worksheet

    ' cuerpo
    For Each Wks In ThisWorkbook.Worksheets
        If Wks.Name = shtName Then
            shtNum = Wks.Index
        End If
    Next

End Function

¿Cómo puedo obtener el número de hoja cuando tengo el nombre de la hoja?

Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón por la que sheets("BOOK").Index no devuelve 5 es porque los números de índice comienzan en 1, no en 0. Entonces, si “BOOK” es la quinta hoja en el libro de trabajo, su número de índice sería 5, pero su posición en la colección Sheets sería 4.

    Para obtener el número de hoja cuando tienes el nombre de la hoja, puedes usar el método WorksheetFunction.Match, que busca un valor especificado en un rango o matriz y devuelve la posición de ese valor dentro del rango o matriz. Por ejemplo, puedes modificar la función de la siguiente manera:

    Function shtNum(ByVal shtName As String) As Integer
        ' declaraciones
        Dim sht As Worksheet
    
        ' cuerpo
        On Error Resume Next
        Set sht = ThisWorkbook.Worksheets(shtName)
        If Not sht Is Nothing Then
            shtNum = WorksheetFunction.Match(shtName, ThisWorkbook.Sheets("Sheet1").Range("A1:A" & ThisWorkbook.Sheets.Count), 0)
        Else
            shtNum = -1 ' o cualquier otro valor que indique que la hoja no se encontró
        End If
    
    End Function
    

    Esta función primero intenta encontrar la hoja por nombre en la colección Worksheets usando ThisWorkbook.Worksheets(shtName). Si encuentra la hoja, utiliza el método WorksheetFunction.Match para encontrar la posición del nombre de la hoja en un rango que incluye todos los nombres de hoja en el libro de trabajo (ThisWorkbook.Sheets("Sheet1").Range("A1:A" & ThisWorkbook.Sheets.Count)). Ten en cuenta que el último argumento de Match se establece en 0, lo que significa que se requiere una coincidencia exacta. Si no se encuentra la hoja, la función devuelve -1 o cualquier otro valor que indique que la hoja no se encontró.

Comments are closed.