Ir a la ultima hoja del libro
Publicado: Jue May 24, 2018 8:35 am
Hola otra vez, después de horas intentándolo no encuentra otra forma de solucionar una duda que no sea pidiendo ayuda. El tema es que a partir de varias macros, unas que he encontrado y otras que me habéis facilitado, ya tengo todo lo que quería, pero sólo me falta un pequeño detalle. Quiero que la macro vaya a la última hoja creada (que crea la misma macro) y escriba en una celda en particular. Según pude encontrar, lo he logrado con el siguiente código:
Pero claro, en este caso le estoy dando yo el número de la hoja, y lo que me gustaría es que en cambio de decirle yo que vaya a la Sheet(9), poder decirle que vaya a la última hoja, sea la que sea. He probado alguna opción, no sé si tiene mucho sentido, pero me pareció que podía ser algo así:
En donde NombreNuevaHoja es una cadena. LEs pego el trozo de la macro, ya sé que debe ser muy cutre, pero es lo que pasa cuando uno no tiene más tiempo (y mira que duermo poco), que tiene que aprender a lo bruto.
Bueno, como siempre millones de gracias, voy a seguir intentandolo a ver si encuentro la solución
Código: Seleccionar todo
ThisComponent.Sheets(9).GetCellByPosition(1,0).SetFormula( xDato )
Código: Seleccionar todo
ThisComponent.getSheetBtName(NombreNuevaHoja).GetCellByPosition(1,0).SetFormula( xDato )
Código: Seleccionar todo
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()
If MsgBox( "¿Deseas guardar los cambios realizados?", 1 + 32, "Añadir Proveedor" ) = 1 Then
nRow = UltimaFila( 1 )
With oDialogo.Model
xDato = .TextField1.Text
ThisComponent.Sheets(1).GetCellByPosition(0,nRow).SetFormula( xDato )
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 = xDato
'Si la celda está vacía sale del procedimiento
If NombreNuevaHoja = "" Then Exit Sub
NombreNuevaHoja = "HojaPedido " & 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/HojaPedido2.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), "HojaPedido", "", "", 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
End With
[color=#FF0040] ThisComponent.getSheetBtName(NombreNuevaHoja).GetCellByPosition(1,0).SetFormula( xDato )
[/color]