Hola, hola y hola!! Y gracias, gracias, gracias! Muchisimas gracias!!! Ya casi lo tengo, y sólo me queda una duda, que en caso de no poder solucionarla, tendría fácil solución. Con esta macro que me has mandado, la he adaptado a lo que realmente necesito que es:
Cada vez que escribo en una casilla de una columna, al darle intro, me abre dos hojas nuevas. Una con la Ficha Técnica y otra con un Escandallo, la primera de color verde y la segunda de color rojo. Tanto en la hoja de la ficha técnica como en la del escandallo, quiero que me abra una plantilla que tengo guardada en mis plantillas, y que uso siempre, para otros archivos también.
Ahora bien, he hecho algun cambio en lo que me has mandado, y funciona todo a la perfección menos una cosa. Como ves, en la macro tengo puesto que el archivo/plantilla del escandallo que me abre en la hoja del escandallo, es un archivo .ods, que está guardado en mi carpeta de Documentos, en cambio, la de la Ficha Técnica, es un archivo .ots, guardado en la carpeta de /Template de libreoffice.
Código: Seleccionar todo
Sub CrearFichaTecnica()
Dim DocCalc As Object
Dim Seleccion As Object
Dim NombreNuevaHoja As String
Dim HojasEnLibro As Object
Dim ArchivoPlantilla As String
Dim HojaCreada 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 <> 2 Then Exit Sub
NombreNuevaHoja = .getString()
'Si la celda está vacía sale del procedimiento
If NombreNuevaHoja = "" Then Exit Sub
NombreNuevaHoja = "FT " & NombreNuevaHoja
HojasEnLibro = DocCalc.getSheets()
With HojasEnLibro
If Not .hasByName(NombreNuevaHoja) Then
'Si no existe la insertamos al final
ArchivoPlantilla = "∕home∕xavi∕.config∕libreoffice∕4∕user∕template∕FichaTecnica2.ods"
.insertNewByName(NombreNuevaHoja, .getCount())
HojaCreada = .getByIndex(.getCount()-1)
With HojaCreada
'PLANTILLA_01: es el nombre de la hoja que va a servir de modelo. El archivo modelo puede
'tener varias hojas y podemos seleccionar la que nos interese
.link(ConvertToURL(ArchivoPlantilla), "FichaTecnica", "", "", com.sun.star.sheet.SheetLinkMode.NORMAL)
.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
'El color de la pestaña lo decide la macro aleatoriamente. Si quieres un color determinado
'tendrías que poner los números apropiados de 0 a 255 siendo:
'RGB(0, 0, 0) el color NEGRO; RGB(255, 255, 255) el color BLANCO;
'RGB(255, 0, 0) el color ROJO; RGB(0, 255, 0) el color VERDE;
'RGB(0, 0, 255) el color AZUL; etc, etc.
.TabColor = RGB(0, 255, 0)
End With
Else
MsgBox "Esta hoja ya existe", 16, "¡Atención!"
End If
End With
End If
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 <> 2 Then Exit Sub
NombreNuevaHoja = .getString()
'Si la celda está vacía sale del procedimiento
If NombreNuevaHoja = "" Then Exit Sub
NombreNuevaHoja = "Esc " & NombreNuevaHoja
HojasEnLibro = DocCalc.getSheets()
With HojasEnLibro
If Not .hasByName(NombreNuevaHoja) Then
'Si no existe la insertamos al final
ArchivoPlantilla = "/home/xavi/Documentos/Escandallo.ots"
.insertNewByName(NombreNuevaHoja, .getCount())
HojaCreada = .getByIndex(.getCount()-1)
With HojaCreada
'PLANTILLA_01: es el nombre de la hoja que va a servir de modelo. El archivo modelo puede
'tener varias hojas y podemos seleccionar la que nos interese
.link(ConvertToURL(ArchivoPlantilla), "Hoja1", "", "", com.sun.star.sheet.SheetLinkMode.NORMAL)
.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
'El color de la pestaña lo decide la macro aleatoriamente. Si quieres un color determinado
'tendrías que poner los números apropiados de 0 a 255 siendo:
'RGB(0, 0, 0) el color NEGRO; RGB(255, 255, 255) el color BLANCO;
'RGB(255, 0, 0) el color ROJO; RGB(0, 255, 0) el color VERDE;
'RGB(0, 0, 255) el color AZUL; etc, etc.
.TabColor = RGB(255, 0, 0)
End With
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
Pues bien, sólo me funciona la primera (el archivo .ods). Imagino que debe ser porque en donde dice "HojasEnLibro = DocCalc.getSheets()" debo cambiarlo por algo conmo "HojasEnLibro = TemplateCalc.getSheets()" o algo así? Puede ser? No tengo mucha idea, pero como funciona todo perfectamente, menos este pequeño detalle, imaginno que debe ser algo que vaya por ahí.
Es imposible no repetirme: Muchísimas gracias por todo!