[RESUELTO]Macro CerrarBD modifi para CerrarFormsPreguntando

Discute sobre las herramientas de la base de datos
Responder
antonsiete
Mensajes: 87
Registrado: Dom Jun 24, 2018 8:48 pm

[RESUELTO]Macro CerrarBD modifi para CerrarFormsPreguntando

Mensaje por antonsiete »

Hola,

en el proceso de simplificar Botones en mis Formularios, he quitado Botones de los que habia puesto y he añadido un Boton con la "Accion" Guardar, para tenerlo al menos, en los Forms que no ponga la Barra de Navegacion Prederteminada(para tener visibles, el Icono Prismaticos, para realizar posibles Busquedas de Registros, y quizas el de Actualizar Controles(para cuando introduzca algun dato nuevo en la tabAuxilar, y poder tenerlo disponible en el Control correspondienteen el momento de estar usando ese Form, por ejemplo en el FormSociasAlta)

Me he dado cuenta, que si por error, pulso el Boton Cerrar Formulario, sin haber previamente pulsado el Boton "Guardar" el formulario se cierra directamente sin guardar los cambios hechos en los registros, y se me ha ocurrido "adaptar" el Macro de CerrarBD(que si pregunta si deseas guardar los cambios en los Forms antes de cerrarlos) para usarlo en el boton de Cerrar Formulario y que se abra la ventana de dialogo "El formulario actual ha cambiado".

He intentado encontrar entre los Macros de OpenOficce el que hace esa funcion , pero no he sido capaz de encontrarlo(creo que tiene algo que uno que es "StoreForm" pero no he querido arriesgar, ya que en el codigo del Macro CerrarBD solo pone "Store"

Código: Seleccionar todo

If ThisDatabaseDocument.isModified = True Then ThisDatabaseDocument.Store
) , asi que tirando del Manual de Macros de Mauricio me he decido a escribir yo el codigo para "crear" ese dialogo, y el dialogo si me aparece al pulsar el Boton Cerrar Formulario.

El problema lo tengo en la asignacion de Macros a dos de las Opciones.
Si no ando muy descaminado deberia quedar asi:

1- en la opcion (6), "Si", para guardar los cambios y cerrar el Formulario, se usaria el propio codigo del Macro CerrarBd

Código: Seleccionar todo

If opcion = 6 Then If ThisDatabaseDocument.isModified = True Then ThisDatabaseDocument.Store 
		                                ThisDatabaseDocument.CurrentController.CloseSubComponents()	'Cierra todos los formularios y pregunta si guarda los datos
2- en la opcion (7), "No", para cerrar el Formulario sin guardar los cambios, no se a que Macro de OpenOficce habria que llamar,

Código: Seleccionar todo

ElseIf opcion = 7 Then '(ThisDatabaseDocument.Store) SUSTITUIR POR CERRAR SIN GUARDAR
3- en la opcion (2), "Cancelar", para cerrar el Dialogo sin cerrar el Formulario, no se a que Macro de OpenOficce habria que llamar,

Código: Seleccionar todo

ElseIf opcion = 2 Then '(ThisDatabaseDocument.Store) SUSTITUIR CERRAR MSGBOX SIN CERRAR FORMULARIO
Con lo cual el Codigo que tengo ahora mismo queda asi:

Código: Seleccionar todo

'****** MACRO PARA Cerrar Forms Preguntando *******************

Sub CerrarFormPreguntando()'Poner en el botón para Cerrar Formulario
	Dim opcion As integer
		opcion = MsgBox ("¿El contenido del formulario actual ha cambiado, deseas guardar los cambios?",35,"Opcion Cerrar Formulario")
	If opcion = 6 Then
		If ThisDatabaseDocument.isModified = True Then ThisDatabaseDocument.Store 
		ThisDatabaseDocument.CurrentController.CloseSubComponents()	'Cierra todos los formularios y pregunta si guarda los datos

	ElseIf opcion = 7 Then '(ThisDatabaseDocument.Store) SUSTITUIR POR CERRAR SIN GUARDAR
	
	ElseIf opcion = 2 Then '(ThisDatabaseDocument.Store) SUSTITUIR CERRAR MSGBOX SIN CERRAR FORMULARIO
	
	End if							
End Sub
Ni siquiera estoy seguro de que sea una buena idea hacer esto(yo creo que si, por si acaso se pulsa por despiste, el Boton Cerrar Formulario sin haber pulsado el Boton Guardar), a ver que opinais, y si es buena idea, a ver a que Macros tendria que llamar en esas dos Opciones.

Un saludo y gracias
Última edición por antonsiete el Vie Jul 13, 2018 10:45 am, editado 1 vez en total.
Apache OpenOffice 4.1.5
OS X El Capitan 10.11.6
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Macro CerrarBD modificado para CerrarFormsPreguntando

Mensaje por RMG »

Hola,

Para cerrar un formulario, para mi la mejor opción es emplear la API UNO y no usar macros. Para probar, en las propiedades del botón en la propiedad Acción seleccionas Abrir documento/pagina web y en URL pones .uno:CloseDoc

Con esto resuelves tu pregunta de preguntar si guardas al cerrar el formulario. Recuerda eliminar si ya tiene asignada una macro de cierre.

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)
antonsiete
Mensajes: 87
Registrado: Dom Jun 24, 2018 8:48 pm

Re: Macro CerrarBD modificado para CerrarFormsPreguntando

Mensaje por antonsiete »

Hola,

yo actualmente estoy usando esto:

Código: Seleccionar todo

'Inicio Macro Boton Cerrar cualquier formulario
Sub CerrarFormulario(Evento)
	ThisComponent.CurrentController.Frame.Close( True ) 
	
End Sub
'Fin Macro
Que creo que saque de alguno de tus ejemplos, pero le he visto esa pega de arriesgar a Cerrar sin Guardar.

Estupendo, acabo de probar esta opcion que comentas, funciona perfecto. Lo que si he visto es que en el primer intento que he hecho me han salido dos Dialogos, en uno de ellos ponia "el formulario "Inicio" ha cambiado...." y en el otro ponia "el formulario actual ha cambiado ......", supongo que sera por que ya tenia abierto el formInicio en modo diseño y posiblemente todavia quedaban restos de la forma anterior de cerrar, guardados en memoria o algo asi, ahora ya solo sale el dialogo standar "El formulario actual ha cambiado........" y por lo que veo funciona a la perfeccion.

Nuevamente, lo mas sencillo es la mejor solucion.

Un saludo y muchisimas gracias
Apache OpenOffice 4.1.5
OS X El Capitan 10.11.6
antonsiete
Mensajes: 87
Registrado: Dom Jun 24, 2018 8:48 pm

Re: Macro CerrarBD modificado para CerrarFormsPreguntando

Mensaje por antonsiete »

La duda que me surge:

Esa API UNO, ¿es una Macro de las que hay en la Biblioteca de OpenOffice o no tiene nada que ver con las Macros?
Apache OpenOffice 4.1.5
OS X El Capitan 10.11.6
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: [RESUELTO]Macro CerrarBD modifi para CerrarFormsPregunta

Mensaje por RMG »

Hola,

Pues no te se concretar cosas de UNO, yo también he aprendido investigando y probando. Otras opciones.

.uno:CloseDoc Cierra el formulario activo.
.uno:RecSave Guarda el registro activo y se mantiene en el mismo.
.uno:Refresh Pregunta si guarda el registro activo, y va al primer registro del formulario
.uno:Print Imprime el formulario actual

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)
antonsiete
Mensajes: 87
Registrado: Dom Jun 24, 2018 8:48 pm

Re: [RESUELTO]Macro CerrarBD modifi para CerrarFormsPregunta

Mensaje por antonsiete »

hola,

ok, tomo nota para mas adelante.

Un saludo
Apache OpenOffice 4.1.5
OS X El Capitan 10.11.6
Responder