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:
|
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 Dim oRoutaLink as String ‘oFrom, oField y oTfield son variables para conseguir leer la casilla de Texto llamada Adjuntos, Dim oForm as Object ‘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 »»»»»»»»»»»»»»»»»»»»»»»’ »»»»»»»»»»»»»»»»»»»»»»»’ »»»»»»»»»»»»»»»»»»»»»»»’ »»»»»»»»»»»»»»»»»»»»»»»’ ‘Obtenemos que evento tiene el botón If Archivo = IDYES then
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!
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
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!
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
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!