LibreOffice BASE- Abrir Archivo con Botón (programando en BASIC)

En Febrero de 2018, publiqué un vídeo dónde explicaba cómo abrir un archivo desde un Botón con Visual Basic (VBA) en Microsoft Access:

Esa función, la he ido puliendo añadiendo puntos de agregar el archivo, copiarlo, renombrarlo…

Y gracias a ese vídeo, me planteó un usuario el hacer lo mismo para LibreOffice, que aunque está también para Linux, en este ejemplo será para un LibreOffice instalado en Windows.

LibreOffice nos permite crear macros en BASIC, sin conocer este lenguaje, la suerte es que VBA es un «dialecto» de BASIC y la lógica de las órdenes puede ser bastante clara, no sabré programar, pero viendo ejemplos y buscando por foros se pueden conseguir muchas cosas.

La opción de crear Macros en LibreOffice, es muy curiosa, puedes crear una Macro en la propia base de datos, o dentro del propio BASE (símil de Access), para entrar en la edición de Macros podremos entrar cuando estemos en el formulario en modo Edición y en el menú superior en la siguiente ruta: Herramientas>Macros>Organizar Macros>Basic, en este momento, seleccionamos nuestra Base datos y damos al botón de Nuevo y nos abrirá el entorno de BASIC para programar nuestra nueva macro «Macro1», en este ejemplo, la macro se la he renombrado a Explorer.

Damos por hecho, que ya tienes las tablas y el formulario creados, y únicamente hay que agregar un nuevo campo a la tabla llamado «Adjuntos», el campo en el formulario y la subcarpeta en la carpeta donde tendremos alojada la base de datos.

SPOILER: Si pruebas el código sin ver el vídeo que está al final de este artículo, es posible que te salga el siguiente error:

Error de Ejecución de BASIC.
Se ha producido una excepción
Tpye.com.sun.star.container.NoSuchElementException

Message: .

Aquí el código, las líneas que tengan el apóstrofe delante, son comentarios que no se ejecutan o líneas que he usado para pruebas pero que luego no hace falta que se ejecuten:

Sub Explorer (oEvent as object)

‘1ro Declaramos las variables
‘RutaLink: En esta variable capturamos la ruta de nuestra base de datos en formato «URL»,
‘que luego la tendremos que cambiar a un formato entendible para Windows, y esa ruta
‘modificada la guardaremos en RutaOS.

Dim oRoutaLink as String
Dim oRutaOS as String

‘oFrom, oField y oTfield son variables para conseguir leer la casilla de Texto llamada Adjuntos,
‘dónde tenemos guardado el nombre del archivo, con su extensión, que queremos abrir,
‘finalmente guardaremos esa «dirección» en oRutaFinal.

Dim oForm as Object
Dim oBoton as Object
Dim oField as Object
Dim oRutaFinal as String

‘Añadimos una librería que nos hará falta para conseguir la Ruta

GlobalScope.BasicLibraries.LoadLibrary( «Tools» )

‘Conseguimos la Ruta de la Base Datos, de esta manera, nos da igual que esté alojada en una carpeta local
‘o en una unidad de red, ya que siempre nos guardará en la ruta que esté, eso sí, en esa ruta es dónde
‘tendremos creada nuestra subcarpeta llamada «Adjuntos»
oRutaLink = (DirectoryNameoutofPath(ThisComponent.Parent.getURL(), «/») & «/»)

»»»»»»»»»»»»»»»»»»»»»»»’
‘Este MSGBOX es sólo informativo durante las primeras pruebas, cuando todo funcione podemos eliminarlo.
msgbox (oRutaLink,1, «Nombre de la Ruta tipo LINK»)

»»»»»»»»»»»»»»»»»»»»»»»’
‘La Ruta la pasmos a un formato entendible para Windows.
oRutaOS = ConvertFromURL(oRutaLink)

»»»»»»»»»»»»»»»»»»»»»»»’
‘Este MSGBOX es sólo informativo durante las primeras pruebas, cuando todo funcione podemos eliminarlo.
msgbox (oRutaOS ,1, «Nombre de la Ruta tipo OS»)

»»»»»»»»»»»»»»»»»»»»»»»’

‘Obtenemos que evento tiene el botón
oBoton = oEvent.Source.Model
‘Obtenemos en qué formulario está el botón
oForm = oBoton.Parent
‘Obtenemos el contenido campo de texto «Adjuntos» que está en el formulario que hemos capturado antes.
oField = oForm.getByName(«Adjuntos»)
‘Ruta final del archivo a abrir con el nombre de la carpeta donde está el archivo y el nombre de éste.
‘Tenemos la Ruta en formato Windows, a la subcarpeta «Adjuntos\» y con el texto que hay en el campo «Adjuntos»
oRutaFinal= oRutaOS & «Adjuntos\» & oField.getCurrentValue
‘Mostramos un mensaje de texto que informa qué archivo vamos a abrir, incluyendo la ruta completa.
‘Con este mensaje, podemos aceptar o cancelar.
‘Si aceptamos, se abrirá el archivo, si cancelamos nos saldrá otro mensaje indicando que hemos cancelado la acción de abrir.
Archivo = msgbox («Vamos a abrir el siguiente archivo» + Chr(13) + Chr(13) & oRutaFinal,MB_YESNO, «INFORMACIÓN»)

If Archivo = IDYES then
Shell(«explorer»,1, oRutaFinal)
Else
msgbox(«CANCELADA», 0+64, «Acción»)


End if

End sub

NOTA: Cuidado al «copiar / pegar», si hay algún espacio en blanco que no debe estar, va a dar fallo y, por supuesto, no se pueden pegar las imágenes.

Si entrais a editar la macro, os saldrá éste mensaje de error en la línea:

RutaLink = (DirectoryNameoutofPath(ThisComponent.Parent.getURL(), «/») & «/»)

pero sin problemas, que al ejecutar, funciona.

Cualquier duda, vais planteando, y no os olvidéis en pasar por el canal de Youtube, dar al «me gusta» y suscribirse! a ver si para el 2021, llegamos a ser 1000 suscriptores!

4 comentarios en “LibreOffice BASE- Abrir Archivo con Botón (programando en BASIC)

  1. Buenos días, soy Roberto Ramírez.
    El año pasado, te solicité si me podías hacer el favor de crearm euna Macre en LibreOffice Base para abrir archivos desde un botón y conseguiste hacerlo en tiempo record y te estuve eternamente agradecido. Por cireto, que sigo buscando por internet alguien que sepa hacerlo y creo que has sido el único en conseguirlo.
    Ahora me encuentro otra vez atascado con otra Base de datos en LibreOffice Base.
    Estoy intentando, DESDE UN BOTÓN, FILTRAR REGISTROS DE UNA COLUMNA.
    Por ejemplo, tengo una TABLA de concesionarios de coches, con varios Campos: «Nombre Concesionario», «Ciudad», «Vehículo», «Fecha Compra» y estoy intentado dentro en un FORMULARIO, y a través de un CONTROL DE TABLAS, que con un BOTÓN QUE SE LLAME MADRID, ME FILTRE SÓLO LOS REGISTROS QUE HAY EN MADRID.
    Si no te importa, me dices tu correo electrónico y te envío un archivo en Word para explicártelo con imágenes.
    Gracias de antemano y un saludo.

    Aquí te dejo, por si te sirve de ayuda, el Código para programar el Botoón en Microsoft Access
    CÓDIGO VBA PARA MICROSOFT ACCESS

    Private Sub Comando90_Click()
    ‘ donde Comando90 es el nombre del Botón
    DoCmd.ApplyFilter «», «[Ciudad]=»»Madrid»»»
    Me.Refresh
    Me.Lista88.Visible = True
    ‘ donde Lista88 es el nombre del CONTROL DE TABLAS
    Me.Lista84.Visible = False
    Me.Lista109.Visible = False
    ‘ éstos son otros 2 CONTROL DE TABLAS que reflejan otras informaciones de otros «Botones»
    End Sub

    1. Hola Roberto!

      Encantado de volver a leerte.
      Me pongo a ello esta entre hoy y la semana que entra.
      Si tienes un ejemplo ya creado, y me lo haces llegar, ganaremos algo de tiempo (si aún te hace falta, claro…) 😉
      Subes el ejemplo a WeTransfer y pegas aquí el link. (en 2 semanas lo borrarán)

      Un saludo!

  2. Excelente video, gracias por compartir tus conocimientos…
    Estoy haciendo una Base de Datos en LibreOffice y no encuentro como llamar a los informes desde botones y como crear un informe a partir de un control de tablas, donde esta el resultado de una busqueda.
    Por favor de donde sacas toda la documentacion de la API de LibreOffice, porque se ve que se puede hacer cosas muy complejas pero con la informacion correcta.
    Gracias

    1. Buenas Carlos!
      Con LibreOffice trabajé muy poco, únicamente para poder ayudar a Roberto, y al final conseguimos lo que él necesitaba.
      Si me dices qué versión de LibreOffice tienes (para usar la misma) y me puedes pasar un ejemplo de la Base de Datos (sin datos reales, solo ejemplos), miro de refrescar memoria y a ver qué podemos hacer para:
      – Llamar/Generar informes
      – Generar informes

      A mi me gusta más Access, pero últimamente estoy más enfocado a Excel, pero siempre tirando de foros y tutoriales, ya te aviso que no soy un master&commande en la materia, es más un hobby. ????

      Saludos!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *