Listado de las hojas de un libro

mi pregunta es la sig.

Tengo una macro asignada a un botón que me adiciona hojas y las nombra y funciona perfectamente.

Sub ReplicarHojaActual()
Nombre = Range("a20").Value
Sheets("1").Copy After:=Sheets(ActiveWorkbook.Sheets.Count)
ActiveSheet.Name = Nombre
End Sub

Ahora bien estoy creando otra macro para listar el nombre de todas las hojas y ponerlas en una hoja resumen.

Public Function NombreHojas()
Dim Arr() As String
Dim I As Integer
ReDim Arr(Sheets.Count - 1)
For I = 0 To Sheets.Count - 1
Arr(I) = Sheets(I + 1).Name
Next I
NombreHojas = Application.WorksheetFunction.Transpose(Arr)
End Function

Que también funciona bien. Pero cuando presiono el botón para crear una nueva hoja en lugar de ponerme el nombre de la nueva hoja me pone "1(2)" cuando deberia poner "diaz".

Cuando creo una nueva hoja es que aparece "diaz" y así sucesivamente, de modo que siempre me va a faltar una hoja.

2 Respuestas

Respuesta

Estoy casi seguro que el problema se debe a la dimensión del arreglo (la cantidad de hojas que tiene el libro es .Count y no .Count -1) y a como estás recorriendo las hojas, pero sin el archivo es muy difícil asegurarlo

Salu2

Ok. Quisiera enviarte el archivo pero soy nuevo en esta página y no se como, quizás si me das el correo te lo envío. Gracias

Pasame tu correo y te escribo para contactar.

Salu2

Respuesta

.31/08/16

Buenos días, Elieser

En mi modesta opinión, prefiero reservar las funciones (UDF) para cuando no encontré realmente una mejor solución nativa de MS Excel y, de hecho, algunas veces, no tuve más remedio.

Por eso me preguntaba por qué tu rutina de replicar hoja no deja el nombre al final del listado de hojas cuando termina de replicar la hoja. Pero imagino que tendrás tus razones.

Alternativamente, te comparto esta rutina que lista, a partir de la celda que le indiques, todas las hojas de tu libro y, además, crea un hipervínculo a determinada celda de esa hoja, para que funcione como un índice-navegador:

Sub NombreHojas()
PrimCelda = "c14" ' o ActiveCell.Address para que lo haga desde la celda actual
CeldaHoja = "D7"
linea = 0
For Each sht In Sheets
    With Range(PrimCelda)
        .Offset(linea, 0).Value = sht.Name
        . Offset(linea, 1).Value = sht. Range(CeldaHoja) ' si quieres que te deje, al lado, algun dato particular de esa hoja
            vinc = "'" & .Offset(linea, 0).Value & "'!" & CeldaHoja
        ActiveSheet.Hyperlinks.Add Anchor:=.Offset(linea, 0), Address:="", SubAddress:=vinc
        linea = linea + 1
    End With
Next
End Sub

Bien, tómalo como sugerencias solamente. Tal vez te ayuden.

Un abrazo

Fernando

(Buenos Aires, Argentina)

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas