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?
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ónSheets
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:Esta función primero intenta encontrar la hoja por nombre en la colección
Worksheets
usandoThisWorkbook.Worksheets(shtName)
. Si encuentra la hoja, utiliza el métodoWorksheetFunction.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 deMatch
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ó.