[RESUELTO] Formulario con varias macros en 1 mismo evento

Discute sobre las herramientas de la base de datos
Responder
Sheridan
Mensajes: 48
Registrado: Lun Abr 22, 2019 8:32 pm

[RESUELTO] Formulario con varias macros en 1 mismo evento

Mensaje por Sheridan »

Buenos días, tengo un par de dudas;

1) Hace poco me ayudasteis en mi base de datos para poder asociar a cada registro una imagen , para ello RMG me facilitó una macro que disparaba el evento "tras el cambio de registro" en los "Acontecimientos" del formulario:

https://forum.openoffice.org/es/forum/v ... 397#p64050

Y me funciona genial.. : :bravo:

Ahora necesito crear dos o más botones que habrán documentos (Web o PDF) , asociados a un nuevo campo de la tabla, buscando por el foro, he encontrado una macro de este tema que llevó Mauricio y que me ha venido genial en "otra base de datos que NO tenía imágenes"..:

https://forum.openoffice.org/es/forum/v ... 500#p55195

El problema :cry: viene cuando quiero hacer las dos cosas : dos eventos ( uno que me cargué las imágenes y otro que me cargué las direcciones que quiero abrir al pulsar los botones) porque los situan en la misma ubicación de "Acontecimientos"del formulario ( tras cambio de registro) ..

Debe de ser una tontería pero he probado a situar los eventos en otras opciones de activación y no me funciona.

2)Otra cosa , como crear más de un botón para cargar varios documentos..la macro debe cambiar y no me hace caso ... En el ejemplo de Mauricio carga las direcciones web y también las de correo electrónico... Entiendo que debe de hacerse de forma parecida pero tampoco me sale..

Gracias por vuestra muy apreciada ayuda.
Última edición por Sheridan el Mié Jun 12, 2019 4:15 pm, editado 2 veces en total.
Windows 10 64 bit + OpenOffice 4.1.6 y Deepin 15.10 + Open Office
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Formulario con Botones e imágenes;Macro cambio de regist

Mensaje por RMG »

Hola,

A lo que entiendo, en el mismo evento puedes hacer las dos cosas, solo utiliza distintas variables para recoger los valores. Respecto a lo último, no lo acabo de entender, mejor adjuntar un pequeño ejemplo.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Sheridan
Mensajes: 48
Registrado: Lun Abr 22, 2019 8:32 pm

Re: Formulario con Botones e imágenes;Macro cambio de regist

Mensaje por Sheridan »

1) Hola crack , claro, aquí el enlace :
https://we.tl/t-bLlycHFCHJ

Como verás, hay un formulario de creación de artículos "Frm_Lentilla" donde introduzco los campos oportunos ; entre ellos uno nuevo que he llamado web , con la dirección de la ubicación del archivo que quiero abrir , por ej : www.marca.com ...y otro formulario de busqueda (Frm_BusqPVP) que me filtra por las selecciones que hago y me ofrece los resultados en el cuadro de tabla...Pues bien , ahora en ese mismo formulario he insertado un botón para que pueda cargar la pagina web correspondiente al registro que seleccione en la tabla..

PROBLEMA ...Pues que no sé como debo introducir 2 macros en un mismo evento de formulario ("tras el cambio de registro" )..por el momento están las 2 macros separadas (en el mismo modulo 3 y el formulario solo escoge en ese evento la macro "CambiaImagen (document, Basic)" ( que es el de la carga de imágenes)...

2)Necesito que el formulario de busqueda (Frm_busqPVP) tenga mas de un botón (he creado el boton "web",pero la idea es tener mas ; email,web2, pdf1,pdf2...) para que abriera las direcciones donde ubico los archivos y que asocio a cada registro en su campo correspondiente,claro , algunos están en mi ordenador y otros son webs...(los archivos son casi todos en pdf..)..

Se me entiende algo? ..porque estoy empezando a ver unicornios.. :knock:
Windows 10 64 bit + OpenOffice 4.1.6 y Deepin 15.10 + Open Office
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por Longi »

Buenas!

Mis conocimientos son limitados, muy limitados, así que quizá no debiera responder.....
Yo no uso el tag en los botones, directamente en el evento de botón de ratón pulsado o en el de botón de ratón soltado pongo la referencia a la macro.
Esto tiene el inconveniente con respecto a lo que pides que solo sirve para una función, pero lo arreglo con macros, de tal manera que una macro, en función de lo que haya en el formulario puede llamar a una macro u otra. Es lo que yo llamo macro de distribución, y ésta misma puede llamar seriadamente a varias, lo cual sería tu caso....
¿Más unicornios?, no me extraña, con lo bueno que soy con mis explicaciones! :lol: :lol: :lol: :lol:

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Sheridan
Mensajes: 48
Registrado: Lun Abr 22, 2019 8:32 pm

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por Sheridan »

Hola Longi, ante todo muchas gracias por el consejo.Caray !, me parece muy interesante tu método para desarrollarlo, pero desconozco cómo hacer funcionar una macro de distribución, si pudieras subir algún ejemplo podría intentar llevarlo a cabo.. porque hasta ahora lo he hecho de otro modo...siempre se puede aprender un poco más..

La verdad es que RMG me comentaba otra opción, también válida para resolverlo, el comentaba que se podían utilizar dos variables dentro de la misma macro.. pero tampoco sé cómo llevar esto a cabo..
Windows 10 64 bit + OpenOffice 4.1.6 y Deepin 15.10 + Open Office
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por Longi »

Buenas!
Al ser solo un ejemplo me he tomado la libertad de anular las dos macros que tenías en el módulo 3 y he puesto las mías.
En el formulario he puesto un botón nuevo que llama a las macros que pongo.
Supongo que esto es lo que quieres, pero el modo de trabajar varía un poco (no se entra en el evento directamente, y he tenido que usar una variable externa a la macro), pero parece que funciona.

Un saludo! ;)

Ah!, y lo de macro distribuidor no es ningún tecnicismo....es un 'palabro' que uso yo en mi jerga particular. No creas que lo vas a leer en ningún libro conciezudo!
Adjuntos
Lentillas Prueba1.7z
(92.16 KiB) Descargado 207 veces
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Sheridan
Mensajes: 48
Registrado: Lun Abr 22, 2019 8:32 pm

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por Sheridan »

Bienas Longi , Gracias por responder tan rápido!!.
Efectivamente la macro funciona pero ahora las imagenes no cambian!!! solo me sale 1 para todos los registros!!!
¿Porque puede ser?
Windows 10 64 bit + OpenOffice 4.1.6 y Deepin 15.10 + Open Office
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por RMG »

Hola,

Además de la solución de Longi, esta es la que te he comentado de poner más variables a la misma. Recuerda que debes poner la propiedad "Acción" del botón a Abrir documento/página web.

Código: Seleccionar todo

Sub CambiaImagen( Evento )
Dim sDirectorioActual As String
Dim sDirectorioImagenes As String
Dim mTmp()
Dim sRuta As String
Dim sImagen As String
Dim txtImagen As Object
Dim icImagen As Object
Dim oForm As Object
Dim oBot As Object
Dim oTxt As Object
	oForm = Evento.Source
	sDirectorioImagenes = "ImagenesLentillas"
	sDirectorioActual = ThisDatabaseDocument.getURL
	mTmp = Split( sDirectorioActual, "/" )
	mTmp(UBound(mTmp)) = ""
	sDirectorioActual = Join( mTmp, "/" )
	sDirectorioActual = sDirectorioActual & sDirectorioImagenes & "/"
	
	'El control donde esta el nombre de la imagen
	txtImagen = oForm.getByName("IdLentilla")
	'El control para mostrar la imagen
	icImagen = oForm.getByName("icImagen")
	
	'Obtenemos el nombre de la imagen	
	sImagen = txtImagen.Value & ".jpg"
	'Contruimos la ruta completa de la imagen
	sRuta = sDirectorioActual & sImagen
	'Mostramos la imagen
	icImagen.ImageURL = sRuta
	
	oBot = oForm.getByName("Abrir_web")
	oTxt = oForm.getByName("web")
	If Trim(oTxt.Text) <> "" Then
      oBot.TargetURL = Trim(oTxt.Text)
	Else
      oBot.TargetURL = ""
	End If
End Sub
Para abrir archivos .pdf u otra extensión, esto no sirve.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por Longi »

Como te dije, es otra manera de trabajar, y el cambio lo provoco al clickar el botón.
La macro recoge el ID de la imagen que está indicada en el formulario en el momento de clickar el botón. Entonces, y solo entonces cambia la imagen (o eso creo).
La misma filosofía podría seguirse desde una macro (distribuidor) que se dispare en el evento del formulario 'antes de efectuar cambios' (como lo que tenías hasta ahora), pero en vez de asignarle funciones al botón, directamente que te coja el ID de la imagen y el texto del campo 'web' y trabaje con ellos.
Date cuenta que te 'inutilicé' las dos macros que tenías, por lo que no están trabajando. De ahí que encuentres diferencias con respecto a lo anterior (diferencias, no mejoras).

Un saludo! ;)
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Sheridan
Mensajes: 48
Registrado: Lun Abr 22, 2019 8:32 pm

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por Sheridan »

Bueno ante todo muchas gracias a los dos :bravo: , veo que desde dos puntos de vista distintos se puede llegar a la solución de un mismo problema.
RMG he probado tú solución y me funciona ,ah!! Y he podido comprobar qué esa misma macro permite abrir archivos en PDF !! (si se escribe la ubicación del mismo y su nombre...)..

Solamente me faltaría que me aclaraseis el punto 2, cómo introducir varios botones que habrán diferentes páginas webs en el mismo formulario.. quizás la solución vaya por crear distintas variables..?
Windows 10 64 bit + OpenOffice 4.1.6 y Deepin 15.10 + Open Office
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por RMG »

Hola,

Posible solución, poner tantos campos web como botones necesites y ampliar las variables a esos campos y esos botones. Efectivamente, puede abrir pdf y archivos de AOO, no así de otras aplicaciones, que es necesario ejecutar el shell.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Sheridan
Mensajes: 48
Registrado: Lun Abr 22, 2019 8:32 pm

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por Sheridan »

Buenas tardes RMG he intentado, sin éxito, modificar la macro introduciendo unas líneas en las que se llame al campo "web3"que es donde quiero introducir la segunda dirección de otra página web.. y he creado también un botón con el nombre "Abrir_web3'...

Código: Seleccionar todo

REM  *****  BASIC  *****
Option Explicit

                        
Sub TeclaPulsadaStandar(Evento AS object)
	Dim oTxt As String
	Dim oFilter As Object
	Dim oFormCtl As Object
	Dim oCtrl As Object
	Dim valor As String
	Dim campo As String
	oTxt = Evento.Source.getText()
	valor = Evento.Source.Model.Tag
	campo = Evento.Source.Model.Name
	oCtrl = Evento.Source
	oFormCtl = oCtrl.Model.Parent
	oFormCtl.ApplyFilter = False
	If oTxt <> "" then
		If campo = "Contiene" Then
			oFormCtl.Filter = " UPPER(" & valor & ") LIKE " + "UPPER('%" & oTxt & "%')" 'ENCUENTRA SI CONTIENE ALGO DE LA TECLA PULSADA
			oFormCtl.ApplyFilter = True
		End If
		If campo = "Empieza" Then
			oFormCtl.Filter = " UPPER(" & valor & ") LIKE " + "UPPER('" & oTxt & "%')" 'ENCUENTRA SI EMPIEZA POR LA TECLA PULSADA
			oFormCtl.ApplyFilter = True
		End If
	Else
		oFormCtl.ApplyFilter = False
	End if
	oFormCtl.Reload
	oCtrl.SetFocus()
	oFormCtl.ApplyFilter = False
End Sub
REM  *****  BASIC  *****

Sub BotonAbreURL1( Evento )' Poner en el evento del formulario Tras el cambio de registro
Dim oForm As object
Dim oBot As Object
Dim oTxt As Object
   oForm = Evento.Source
   oBot = oForm.getByName("Abrir_web")
   oTxt = oForm.getByName("web")
   If Trim(oTxt.Text) <> "" Then
      oBot.TargetURL = Trim(oTxt.Text)
  
   
   Else
   End If
     
   oBot.TargetURL = ""
   oForm = Evento.Source
   oBot = oForm.getByName("Abrir_web3")
   oTxt = oForm.getByName("web3")
   If Trim(oTxt.Text) <> "" Then
      oBot.TargetURL = Trim(oTxt.Text)
   Else
      oBot.TargetURL = ""
   
   End If
        
End Sub


Sub sBotonAbreFormulario(Evento)
   Dim Control as Object
   Control = ThisDatabaseDocument.CurrentController
   If Not Control.IsConnected Then   Control.Connect
   ThisDatabaseDocument.FormDocuments.GetByName(Evento.Source.Model.Tag).Open   
End Sub
te dejo la macro para que me digas dónde está el error porque únicamente se me abre de esta forma la página del campo "web3" la primera "web"aunque apriete el botón no me hace nada...
Windows 10 64 bit + OpenOffice 4.1.6 y Deepin 15.10 + Open Office
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por RMG »

Hola,

Estas utilizando una macro que no es, yo te puse otra, mira arriba. Y así es como quedaría para otro botón.

Código: Seleccionar todo

Sub CambiaImagen( Evento )
Dim sDirectorioActual As String
Dim sDirectorioImagenes As String
Dim mTmp()
Dim sRuta As String
Dim sImagen As String
Dim txtImagen As Object
Dim icImagen As Object
Dim oForm As Object
Dim oBot As Object
Dim oTxt As Object
Dim oBot3 As Object
Dim oTxt3 As Object
   oForm = Evento.Source
   sDirectorioImagenes = "ImagenesLentillas"
   sDirectorioActual = ThisDatabaseDocument.getURL
   mTmp = Split( sDirectorioActual, "/" )
   mTmp(UBound(mTmp)) = ""
   sDirectorioActual = Join( mTmp, "/" )
   sDirectorioActual = sDirectorioActual & sDirectorioImagenes & "/"
   
   'El control donde esta el nombre de la imagen
   txtImagen = oForm.getByName("IdLentilla")
   'El control para mostrar la imagen
   icImagen = oForm.getByName("icImagen")
   
   'Obtenemos el nombre de la imagen   
   sImagen = txtImagen.Value & ".jpg"
   'Contruimos la ruta completa de la imagen
   sRuta = sDirectorioActual & sImagen
   'Mostramos la imagen
   icImagen.ImageURL = sRuta
   
   oBot = oForm.getByName("Abrir_web")
   oTxt = oForm.getByName("web")
   If Trim(oTxt.Text) <> "" Then
      oBot.TargetURL = Trim(oTxt.Text)
   Else
      oBot.TargetURL = ""
   End If

   oBot3 = oForm.getByName("Abrir_web3")
   oTxt3 = oForm.getByName("web3")
   If Trim(oTxt3.Text) <> "" Then
      oBot.TargetURL = Trim(oTxt3.Text)
   Else
      oBot3.TargetURL = ""
   End If
End Sub
Para más botones debes ir poniendo más variables.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Sheridan
Mensajes: 48
Registrado: Lun Abr 22, 2019 8:32 pm

Re: Formulario con Botones e Imágenes - 2 macros en 1 evento

Mensaje por Sheridan »

Madre mía!! Me has salvado!!
al principio no me cargaba la macro pero me he dado cuenta que se te ha olvidado escribir un "3" en la penúltima entrada que empieza por ." Obot...", Ha sido cambiarlo dejarlo así y ya me ha funcionado..

Código: Seleccionar todo

 CambiaImagen( Evento )
Dim sDirectorioActual As String
Dim sDirectorioImagenes As String
Dim mTmp()
Dim sRuta As String
Dim sImagen As String
Dim txtImagen As Object
Dim icImagen As Object
Dim oForm As Object
Dim oBot As Object
Dim oTxt As Object
Dim oBot3 As Object
Dim oTxt3 As Object
   oForm = Evento.Source
   sDirectorioImagenes = "ImagenesLentillas"
   sDirectorioActual = ThisDatabaseDocument.getURL
   mTmp = Split( sDirectorioActual, "/" )
   mTmp(UBound(mTmp)) = ""
   sDirectorioActual = Join( mTmp, "/" )
   sDirectorioActual = sDirectorioActual & sDirectorioImagenes & "/"
   
   'El control donde esta el nombre de la imagen
   txtImagen = oForm.getByName("IdLentilla")
   'El control para mostrar la imagen
   icImagen = oForm.getByName("icImagen")
   
   'Obtenemos el nombre de la imagen   
   sImagen = txtImagen.Value & ".jpg"
   'Contruimos la ruta completa de la imagen
   sRuta = sDirectorioActual & sImagen
   'Mostramos la imagen
   icImagen.ImageURL = sRuta
   
   oBot = oForm.getByName("Abrir_web")
   oTxt = oForm.getByName("web")
   If Trim(oTxt.Text) <> "" Then
      oBot.TargetURL = Trim(oTxt.Text)
   Else
      oBot.TargetURL = ""
   End If

   oBot3 = oForm.getByName("Abrir_web3")
   oTxt3 = oForm.getByName("web3")
   If Trim(oTxt3.Text) <> "" Then
      oBot3.TargetURL = Trim(oTxt3.Text)
   Else
      oBot3.TargetURL = ""
   End If
End Sub
Muchísimas gracias chicos me están quedando unas bases de datos geniales!!! no sabría hacer nada sin vosotros!!! :bravo: :bravo: :bravo:

Post data: en ocasiones me parece ver unicornios ... pero en este foro me enseñais a ver caballos... ;)
Windows 10 64 bit + OpenOffice 4.1.6 y Deepin 15.10 + Open Office
Responder