Página 1 de 1
Ayuda con Calc, ordenar numéricamente hojas exc. 2 primeras
Publicado: Jue May 28, 2020 7:58 pm
por eonybor
Buenas tardes,
Por favor, necesito ordenar una serie de hojas en Calc y ese orden tiene que ser numérico, sin tener en cuenta las dos primeras hojas del libro. Hay alguna manera?, si es así, cuáles son los pasos a seguir?
Muchas gracias
Re: Ayuda con Calc, ordenar numéricamente hojas exc. 2 prime
Publicado: Jue May 28, 2020 8:20 pm
por PepeOooSevilla
Hola.
Te damos la bienvenida al Foro y, por favor, no dejes de leer la
Guía de supervivencia.
Tienes que dar más información:
* ¿Quieres ordenar
de una sola vez todas las hojas excepto las dos primeras?
* ¿Todas las hojas excepto las dos primeras tienen la misma estructura?
* ¿Por qué columna (o campo) se ordenaría? ¿Es igual para todas o cambia según la hoja a ordenar?
* ...
¿Podrías
subir un archivo de ejemplo? Si no sabes cómo subir un archivo, consulta
Cómo adjuntar un archivo.
Ese archivo de ejemplo no tiene por qué ser "
el archivo original", ni contener cientos de filas y columnas pero sí debe tener unos mínimos datos (ficticios, que este es un Foro público) con los que poder calcular y el "formato original" para saber cómo están distribuidos esos datos. Todo esto ayuda a los
voluntarios que formamos este Foro para que podamos ofrecerte una mejor solución.
Saludos cordiales.
Re: Ayuda con Calc, ordenar numéricamente hojas exc. 2 prime
Publicado: Vie May 29, 2020 6:49 am
por eonybor
Buenos días,
* Sí, la intención es ordenar de una sola vez todas las hojas excepto las dos primeras
* Todas las hojas excepto las dos primeras tienen la misma estructura y se deben de ordenar numéricamente, en orden descendente, las referencias de las hojas (cada pestaña), por ejemplo son: 205, 206, 208, y así sucesivamente
* Se deben de ordenar por número de hoja (exceptuando las dos primeras que deben de ir fijas) en orden descendente, por ejemplo: 210, 208, 206...
Muchas gracias
Re: Ayuda con Calc, ordenar numéricamente hojas exc. 2 prime
Publicado: Vie May 29, 2020 12:44 pm
por PepeOooSevilla
Hola.
Adjunto un ejemplo con una de las posibles soluciones. Este es el código:
Código: Seleccionar todo
REM ***** BASIC *****
Option Explicit
Sub OrdenarHojas()
Dim DocCalc As Object
Dim NumHojas As Integer
Dim Contador As Integer
Dim NombreHojasEnNumero() As Variant
DocCalc = ThisComponent.getSheets()
With DocCalc
NumHojas = .Count
' Las 2 primeras no se cuentan. Se empieza por 0
Redim NombreHojasEnNumero(NumHojas-3)
For Contador = 2 To NumHojas-1
NombreHojasEnNumero(Contador-2) = Val(.getByIndex(Contador).getName())
Next Contador
'MsgBox NumHojas
'MsgBox Join(NombreHojasEnNumero(), Chr(10))
Call OrdenarVectorNumerico(NombreHojasEnNumero())
'MsgBox Join(NombreHojasEnNumero(), Chr(10))
For Contador = 0 to UBound(NombreHojasEnNumero())
.moveByName(CStr(NombreHojasEnNumero(Contador)), Contador+2)
Next Contador
End With
End Sub
Sub OrdenarVectorNumerico(Vector() As Variant)
Dim iMin As Long
Dim iMax As Long
Dim Vectemp As Long
Dim Pos As Long
Dim i As Long
iMin = LBound(Vector())
iMax = UBound(Vector())
Do While iMax > iMin
Pos = iMin
For i = iMin To iMax - 1
If Vector(i) < Vector(i + 1) Then 'orden descendente
Vectemp = Vector(i + 1)
Vector(i + 1) = Vector(i)
Vector(i) = Vectemp
Pos = i
End If
Next i
iMax = Pos
Loop
End Sub
Las dos primeras hojas no se mueven de sitio, el resto se ordena de mayor a menor (orden descendente). Se presupone que los nombres de las hojas son
números. Las dos primeras no se tienen en cuenta. Para ordenar las hojas pincha en
Herramientas > Macros > Ejecutar macro... y selecciona la macro
OrdenarHojas.
Las macros no son fáciles pero si te interesa la programación para OpenOffice/LibreOffice tienes que leer y estudiar el libro
Aprendiendo OOo Basic de nuestro compañero
mauricio. También lo puedes consultar aquí:
Guía de introducción al uso de Apache OpenOffice > Temas Avanzados > Macros > StarBasic.
Saludos cordiales.