Ir a la ultima hoja del libro

Discute sobre la aplicación de hojas de cálculo

Ir a la ultima hoja del libro

Notapor labotica » 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:

Código: Seleccionar todo   Expandir vistaContraer vista
            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   Expandir vistaContraer vista
            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   Expandir vistaContraer vista
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
labotica
 
Mensajes: 19
Registrado: Lun Dic 14, 2015 3:41 pm

Re: Ir a la ultima hoja del libro

Notapor pygope » Jue May 24, 2018 10:17 am

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.0.2 en SparkyLinux
pygope
 
Mensajes: 14
Registrado: Mar Mar 20, 2018 11:55 pm

Re: Ir a la ultima hoja del libro

Notapor PepeOooSevilla » Vie May 25, 2018 7:24 am

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   Expandir vistaContraer vista
   .TabColor = RGB(0, 255, 0)
   .GetCellByPosition(1,0).SetFormula( xDato )
End With

Saludos cordiales.
LibreOffice 6.2.7 (64 bits, Still, Empresarial o Estable) en Windows 10. Java 9.0.4 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Avatar de Usuario
PepeOooSevilla
 
Mensajes: 1098
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)


Volver a Calc

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 19 invitados