Página 1 de 1

[RESUELTO]al dar cancelar multiples errores

Publicado: Sab Mar 14, 2020 6:34 pm
por Oscar461
Tengo una macro en un botón para imprimir un informe desde un formulario, funciona todo bien pero cuando pulso el botón de cancelar sin poner el valor requerido, o la x de cerrar el cuadro de dialogo me sale una ventana con múltiples errores, se que faltan líneas de código pero estoy empezando con esto y estoy perdido, os copio la macro a ver si me podéis ayudar.
REM ***** IMPRIMIR INFORME DESDE BOTON *****

Sub Informe

Dim oreportdoc As Object, ocontroller
'------------------------------------------------------------------
'1º Abrimos el informe

ocontroller = Thisdatabasedocument.currentController ' Controlador actual
if not ocontroller.isconnected then ocontroller.connect ' Mantenemos la conexión
oreportdoc = Thisdatabasedocument.reportdocuments.getbyname("Informe Guia de Entrega").open ' Abrimos el informe
NTexttable = oreportdoc.Texttables().GetCount() ' Número de tablas

For z=0 to NTexttable-1 ' Revisamos todas las tablas
oTexttable = oreportdoc.Texttables(z) ' La tabla que toca en cada paso del ciclo
Fila = oTexttable.rows ' Objeto fila
Filas = Fila.Count-1 ' Número de filas que tiene la tabla
For i=0 To Filas ' Ciclo que recorre todas las filas
Next ' Va a la siguiente fila
Next ' Va a la siguiente tabla
End Sub

Re: al dar cancelar multiples errores

Publicado: Dom Mar 15, 2020 9:52 am
por Longi
Buenas!

Por los comentarios que hay en la macro parece que es de algún ejemplo que colgué yo, así que parece que estoy obligado a intentarlo.
Como dices faltan líneas, ya que si lo que quieres es imprimir, esto solo lo saca por pantalla, y estaría bien tener todo el código.
Los errores son porque la macro sigue rodando y necesita referencias que se tendrían con anterioridad y al intentar parar el proceso no se tienen, no es que esté mal el programa, simplemente que no le dejas trabajar a gusto.
El capítulo del libro de Mauricio de control de errores nunca lo estudié (soy un tanto vago...) por lo que normalmente no lo aplicaba y dejaba que la macro terminase, así que la solución que te propongo para informes cógela con pinzas (ya digo, no la apliqué para este tipo de macros):
Al inicio de la macro (justo antes o justo después de declarar las variables) pon esta línea de código:

Código: Seleccionar todo

On Error GoTo oBad                                                                      ' Control de errores
Justo antes del End Sub colocas lo siguiente:

Código: Seleccionar todo

    Exit sub                                                                                          ' Nos echa de la macro
    oBad:                                                                                             ' Etiqueta referenciada en caso de error
    Exit sub                                                                                          ' Acción en caso de llamar a la etiqueta (en caso de error)
Se supone que si hay un error te cierra la macro y no deja seguir más allá, con lo que te evitarías esos mensajes de error.
Si quieres aplicarlo de otra manera, con lo que te pongo en las siguientes líneas te da en un msgbox la línea del error y puedes ir allí a comprobar qué pasó.

Código: Seleccionar todo

    Exit sub                                                                                          ' Nos echa de la macro
        oBad:		
	Dim oErLine As Integer
	Dim oErNum As Integer
	Dim oErMsg As String
		oErLine = Erl
		oErNum = Err
		oErMsg = Error
		Msgbox("Error en la línea número" & Chr$(9) & " : " & oErLine & Chr$(10) _
			& "Número de error " & Chr$(9) & " : " & oErNum &Chr$(10 ) _
			& "Mensaje de error" & Chr$(9) & " : " & oErMsg , 0, "Modulo Formularios, Macro FormularioUsuarios")
El texto 'Modulo Formularios, Macro FormularioUsuarios' es la localización de la macro (módulo y nombre), con lo que es más fácil saber dónde está el fallo. Si tienes varios módulos la línea de código puede ser en cualquiera de los módulos, así que si usas esta rutina (altamente recomendable), tendrás que cambiar esto en cada una de las macros a las que se lo pongas.

Espero que te funcione o que consigas usarlo para la solución que necesitas.

Un saludo! ;)

Re: al dar cancelar multiples errores

Publicado: Dom Mar 15, 2020 12:38 pm
por RMG
Hola,

Además de la solución de Longi, tienes la posibilidad de crear una macro con lo que quieres que haga si le das a cancelar y se lo asignas a ese botón.

Saludos

Re: al dar cancelar multiples errores

Publicado: Lun Mar 16, 2020 10:13 am
por Oscar461
Ante todo gracias a los dos por las respuestas. He intentado lo que me has dicho Longi pero no me funciona y lo de RMG no lo puedo hacer porque no es un cuadro de dialogo que yo haya creado. Además error mío no me explique del todo bien y falta información.
Cuando se abre el informe lo hace con respecto a una consulta que tiene el criterio de Guia en :Guia para que genere el informe del numero de guía que elija, entonces el cuadro que sale es el del criterio por eso no puedo hacer lo que me recomendó RMG y al darle hay a cancelar o a la x es donde se generan todos los errores.
De hecho he quitado las líneas de la macro que sobraban dejándola asi:


Sub Informe

Dim oreportdoc As Object, ocontroller


ocontroller = Thisdatabasedocument.currentController ' Controlador actual
if not ocontroller.isconnected then ocontroller.connect ' Mantenemos la conexión
oreportdoc = Thisdatabasedocument.reportdocuments.getbyname("Informe Guia de Entrega").open ' Abrimos el informe


End Sub

Puede ser que lo que este mal sea el concepto y esta macro no sea la idónea para abrir el informe a través de la consulta con ese criterio.

Re: al dar cancelar multiples errores

Publicado: Lun Mar 16, 2020 11:48 am
por RMG
Hola

Efectivamente, entendí que te referias a un dialogo. Para lo que comentas, entiendo que usas un criterio con parámetros en la consulta del informe.
Si es así, lo aconsejable es crear esa consulta en la misma macro y seleccionar el criterio con un InputBox, si valor devuelto de este es 0 (sin valor o botón cancelar pulsado) que salga de la macro y no lance el informe.
Si la consulta es muy compleja, puedes crear solo una, con el campo necesarios del criterio y vincular las dos consultas a través de ese campo.

Saludos

Re: al dar cancelar multiples errores

Publicado: Lun Mar 16, 2020 9:15 pm
por Longi
Coincido con RMG, con un inputbox pidiendo el parámetro para hacer un Command de la consulta con lo que ya te preguntó el InputBox estaríamos abriendo un informe basado en una consulta como cualquier otra.

Un saludo! ;)

Re: al dar cancelar multiples errores

Publicado: Mar Mar 17, 2020 9:55 am
por Oscar461
Como ya os comente mis conocimientos de momento son muy limitados con las macros voy por la pag 36 del libreo de RMG, lo que estoy haciendo es coger macros y adaptarlas a mis necesidades, si no es abusar os adjunto un ejemplo de la BD de como lo tengo a ver si me podéis guiar con la macro-
Por cierto otra pregunta, tengo una macro de pantalla completa (he probado con otras) que no he conseguido que me funcione siempre me da error de parent no se si es que no la coloco en su sitio.
Ante todo gracias por vuestra ayuda.

Re: al dar cancelar multiples errores

Publicado: Mar Mar 17, 2020 11:18 am
por RMG
Hola,

Primero decirte que el libro es de mauricio, yo solo he puesto en el foro proyectos de ejemplo, para aprender Base.

https://forum.openoffice.org/es/forum/v ... m.php?f=70

Te adjunto tu ejemplo con algunas correcciones, más que correcciones algo nuevo sobre lo que tienes.

Saludos

Re: al dar cancelar multiples errores

Publicado: Mar Mar 17, 2020 2:50 pm
por Oscar461
Perdona por lo del libro aunque con tus conocimientos seguro que podrías escribir uno. Con respecto a la macro es justo lo que quería es perfecta, eres un maquina. Solo una ultima cosa he visto que también has puesto lo de pantalla completa pero ¿donde? por mas que he mirado no lo veo, en otros ejemplos que me he bajado tuyos tampoco logro ver donde lo pones.

Re: al dar cancelar multiples errores

Publicado: Mié Mar 18, 2020 10:47 am
por RMG
Hola,

En las propiedades del formulario en el evento al cargar. Recuerda poner como resuelto, eso nos ayuda a mantener un foro más organizado.

https://forum.openoffice.org/es/forum/v ... f=3&t=2668

Saludos

Re: [RESUELTO]al dar cancelar multiples errores

Publicado: Mié Mar 18, 2020 2:07 pm
por Oscar461
Muchas gracias por todo ya lo encontré.
Saludos.