Ir a la ultima hoja del libro

Discute sobre la aplicación de hojas de cálculo
Responder
labotica
Mensajes: 19
Registrado: Lun Dic 14, 2015 3:41 pm

Ir a la ultima hoja del libro

Mensaje 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
OpenOffice 4.0 en Ubuntu 14.04
pygope
Mensajes: 15
Registrado: Mar Mar 20, 2018 11:55 pm

Re: Ir a la ultima hoja del libro

Mensaje 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 ..
LibreOffice 6.3.3 en NetBSD
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Ir a la ultima hoja del libro

Mensaje 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.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Responder