Página 1 de 1
[RESUELTO] Crear hojas a partir de una columna
Publicado: Jue Abr 12, 2018 1:08 pm
por labotica
Hola de nuevo. Vuelvo a tener una duda y no sé como solucionar un problema. Tengo una hoja de cálculo, y me gustaría que, cada vez que escribo en una celda de una determinada columna, al pulsar intro, se creaSE una hoja nueva con el nombre "Ficha Técnica (y el contenido de la celda que acabo de escribir)". Alguien tiene alguna idea de si es posible hacerlo?
Como siempre, muchísimas gracias por todo
Re: Crear hojas a partir de una columna
Publicado: Dom Abr 15, 2018 8:55 am
por PepeOooSevilla
Hola.
Adjunto una posible solución.
Código: Seleccionar todo
REM ***** BASIC *****
Option Explicit
Sub CrearHojaSegunColumna()
Dim DocCalc As Object
Dim Seleccion As Object
Dim NombreNuevaHoja As String
Dim HojasEnLibro As Object
On Error Goto CONTROL_ERRORES
DocCalc = ThisComponent
Seleccion = DocCalc.getCurrentSelection()
With Seleccion
'Solo si es una sola celda
If .supportsService("com.sun.star.sheet.SheetCell") Then
'También If .getImplementationName() = "ScCellObj" Then
'Si no es la columna A sale del procedimiento
'En OOBasic las columnas y filas comienzan en 0 (cero)
If .getCellAddress.Column <> 0 Then Exit Sub
NombreNuevaHoja = .getString()
'Si la celda está vacía sale del procedimiento
If NombreNuevaHoja = "" Then Exit Sub
NombreNuevaHoja = "Ficha Técnica " & NombreNuevaHoja
HojasEnLibro = DocCalc.getSheets()
With HojasEnLibro
If Not .hasByName(NombreNuevaHoja) Then
'Si no existe la insertamos al final
.insertNewByName(NombreNuevaHoja, .getCount())
Else
MsgBox "Esta hoja ya existe", 16, "¡Atención!"
End If
End With
End If
End With
Exit Sub
CONTROL_ERRORES:
MsgBox "Se ha producido un error ...", 16, "¡Atención!"
End Sub
A tener en cuenta:
- - La macro tiene que estar seleccionada en "Sucesos de hoja -> Contenido cambiado" de la hoja desde donde quieres crear las otras hojas.
- - Las hojas se crean al cambiar el contenido de alguna celda de la columna A (.getCellAddress.Column <> 0). Si quieres que sea la columna B entonces debes cambiar el 0 (cero) por un 1; si es la C por un 2 y así sucesivamente.
- - Si el nombre de la hoja se repite te avisa y no se crea ninguna hoja.
Saludos cordiales.
Re: Crear hojas a partir de una columna
Publicado: Lun Abr 16, 2018 8:07 am
por PepeOooSevilla
... Y si tienes curiosidad e interés en la programación de macros para OpenOffice/LibreOffice tienes que leer el libro
Aprendiendo OOo Basic de nuestro compañero
mauricio .
También en las páginas
Manuales de Apache OpenOffice en español: Basic y,
Basic OpenOffice: Apache OpenOffice Basic en español de nuestro compañero
SLV-es, encontrarás muy buena información.
Saludos cordiales.
Re: Crear hojas a partir de una columna
Publicado: Lun Abr 16, 2018 2:01 pm
por labotica
Muchíisimas gracias. Ahora mismo lo pruebo y comento que tal
Re: Crear hojas a partir de una columna
Publicado: Lun Abr 16, 2018 2:26 pm
por labotica
Perfecto! Es justo lo que necesitaba!!! Y tengo otra duda:
Si quisiera que estas hojas que se me crean, se creasen con una plantilla que tengo hecha, sería posible? Todavía no voy a colocar el tema como resuelto, pero si creen que tengo que abrir otro tema con estas pregunta y marcar este tema como resuelto, así lo haré.
Muchas gracias
Re: Crear hojas a partir de una columna
Publicado: Lun Abr 16, 2018 2:55 pm
por labotica
Y otra pregunta sería si es posible que estas hojas que abre la macro tuviesen un color de pestaña determinado.
Gracias
Re: Crear hojas a partir de una columna
Publicado: Lun Abr 16, 2018 6:01 pm
por mauricio
Efectivamente, son otras preguntas, recuerda, una pregunta por tema, una respuesta por tema.
Saludos
[SOLUCIONADO] Crear hojas a partir de una columna
Publicado: Lun Abr 16, 2018 6:27 pm
por labotica
Ok, abro otro tema, y gracias
Re: [SOLUCIONADO] Crear hojas a partir de una columna
Publicado: Lun Abr 16, 2018 6:36 pm
por mauricio
Por favor, mira este tema:
¿Cómo marcar como RESUELTO un tema?, para conocer la forma correcta de marcar un tema como RESUELTO, ahora lo hago por ti, procura hacerlo tu en el futuro.