Ordenar hojas.

¡Buenos días estimado Fernando!.
Hace unos días me ayudaste mucho y hoy necesito otra vez tu ayuda(espero no abusar).
Tengo un libro en Excel 2000 con varias hojas unas 25 de 50 que tiene el libro.
Estas hojas tienen en A3 el número y en B3 el nombre. Este número es también el de la hoja.
Los nombres están ordenados alfabéticamente y son los que definen el número.
Tengo 16 en lista y 9 huecos para las altas (25hojas).
El problema surge cuando hay un alta en la lista.
Yo tendría que calcular donde va el nombre asignarle el número, colocar la página dónde corresponda y cambiar manualmente el nombre de las hojas siguientes(que es el número de A3).
¿Podría hacerse que al escribir el nombre en B3 lo comparase con todos los B3 de todas las hojas, se ordenasen, se le asignase el número correspondiente(A3) y la hoja tomase este número como nombre y se ordenasen también?.
El resto de las hojas del libro no me importaría que estuviesen al final o al principio ni el orden.
En fin, como no tengo ni idea no sé si lo que te pido es fácil o difícil.
Esperando que sea lo primero, un fuerte abrazo.

1 Respuesta

Respuesta
1
Es cierto, no me ha sido fácil y estuve buscando una solución satisfactoria. De hecho, lo estuve estudiando el fin de semana (que, como sabes, no tengo acceso a Internet)
En realidad, me costó entender la idea de hojas que cambien su nombre porque se insertó una nueva. Me parece que no es muy conveniente.
De todos modos, soy muy respetuoso de las razones por las cuales los usuarios organizan sus archivos de determinada manera, simplemente porque desconozco la totalidad del funcionamiento de ellos.
(Me pregunto, por qué las hojas no tienen por nombre el dato que está en B3...)
Es así que llegué a esta solución, que asume que la celda B3 tiene un nombre único (de todos modos, la macro avisará si encuentra tal problema).
Conceptualmente, funcionan tres macros:
Una, Renombre cada hoja con el nombre en la celda B3 (esta controla que no halla nombres duplicados)
Luego, una segunda macro ordena alfabéticamente las hojas. Aquellas que no tengan valor se agrupan al final del libro.
Finalmente una tercera, remunera las hojas y aquellas que tengan algún nombre en B3 reciben el numero de hoja en A3.
Estas tres macros están engarzadas en la macro "Reordena". Pega, entonces, el siguiente set de procesimientos en un módulo de BVA:
Public Erro As Boolean
Sub Reordena()
Erro = False
RenombraH
If Erro Then Exit Sub
OrdenaH
NumeraH
End Sub
Private Sub RenombraH()
'1º Renombra Hojas por su nombre real
On Error GoTo ErrHandler
For HojaAct = Sheets.Count To 1 Step -1
If Len(Sheets(HojaAct).Range("B3").Value) > 0 Then
NombHoja = Sheets(HojaAct).Range("B3").Value
Else
NombHoja = "ZZZ" & Trim(HojaAct)
End If
Sheets(HojaAct).Name = NombHoja
Next
On Error GoTo 0
Exit Sub
ErrHandler:
Sheets(HojaAct).Select
If Err.Number = 1004 Then
MsgBox "Existe algún problema con el nombre" & Chr(10) & "Macro detiene aquí su ejecución", vbCritical, "No es posible ubicar hoja"
Else
MsgBox Err.Number & ": " & Err.Description
End If
Erro = True
Err.Clear
On Error GoTo 0
NumeraH
Exit Sub
On Error GoTo 0
End Sub
Private Sub OrdenaH()
'2º Reordena Hojas Según nombre
Dim I As Integer, J As Integer
For I = 1 To Sheets.Count - 1
For J = I + 1 To Sheets.Count
If UCase(Sheets(I).Name) > UCase(Sheets(J).Name) Then
Sheets(J).Move Before:=Sheets(I)
End If
Next J
Next I
End Sub
Private Sub NumeraH()
'3º Renumera las hojas según su posición
For HojaAct = Sheets.Count To 1 Step -1
Sheets(HojaAct).Name = HojaAct
If Len(Sheets(HojaAct).Range("B3").Value) > 0 Then
Sheets(HojaAct).Range("A3").Value = Sheets(HojaAct).Name
Else
Sheets(HojaAct).Range("A3").ClearContents
End If
Next
End Sub
---
Espero que sea lo que buscas.
Un abrazo!
Fernando
Admirado Experto:
Si mi cuestión ha resultado difícil y estas trabajando en la respuesta, perdóname y sigue sin prisa trabajando en ella.
Si no te ha llegado mi pregunta por favor, házmelo saber([email protected]).
Si te has olvidado por el acumulo de preguntas que te hemos hecho, recordarte que sigo esperando tu respuesta que me es crucial para poder terminar mi trabajo.
Saludos.
¡Buenas Fernando!
Ante todo muchas gracias por contestarme y tratar de ayudarme.
Creo que no te expliqué bien el trabajo.Es un libro que tiene algunas hojas en forma de ficha.
Contienen los datos de una persona. Cada ficha empieza por el nombre y apellidos(B3) y por el número que se le asigna(A3). Las fichas hay que ordenarlas alfabéticamente, por supuesto que cada hoja podría tener el nombre y apellidos del individuo, pero me pareció más práctico por ese número clave que se le asigna.
Claro que si viene alguien nuevo y tengo que hacerle otra ficha tengo que volver a organizarlas todas alfabéticamente, no caigo ahora en otra solución.
Bueno necesito tiempo para probar las macros, por lo que he probado ordena todas las hojas, pero da la casualidad que otras que no son fichas también tienen en B3 datos y falsea el orden.
Pero como sé que te interesa que cierre la pregunta así lo hago y ya te comento.
Gracias Maestro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas