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!

Leave a Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.