Página 1 de 1

Ir a la ultima hoja del libro

Publicado: Jue May 24, 2018 8:35 am
por labotica
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:

Código: Seleccionar todo

         	ThisComponent.Sheets(9).GetCellByPosition(1,0).SetFormula( xDato )
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í:

Código: Seleccionar todo

         	ThisComponent.getSheetBtName(NombreNuevaHoja).GetCellByPosition(1,0).SetFormula( xDato )
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.

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]     	
Bueno, como siempre millones de gracias, voy a seguir intentandolo a ver si encuentro la solución

Re: Ir a la ultima hoja del libro

Publicado: Jue May 24, 2018 10:17 am
por pygope
Primero, decirte que estoy muy verde con la programacion de Basic de libreoffice.
El número de hojas de un libro se puede determinar así:
NúmerodeHojas = Doc.Sheets.Count

Con lo que ya deberías poder decirle a qué hoja quieres ir.
Esto lo he sacado de un pdf de la página oficial de libreoffice, que adjunto, por si te sirve de algo. Lo malo es que está en inglés.
Quizás debería traducirlo ..

Re: Ir a la ultima hoja del libro

Publicado: Vie May 25, 2018 7:24 am
por PepeOooSevilla
Hola.

Después de la instrucción TabColor y antes del End With correspondiente al With HojaCreada pega el GetCellByPosition como se indica:

Código: Seleccionar todo

	.TabColor = RGB(0, 255, 0)
	.GetCellByPosition(1,0).SetFormula( xDato )
End With
Saludos cordiales.