Saltar al contenido

OpenArgs es un problema nulo

Recuerda que en las ciencias informáticas un error casi siempere puede tener diferentes resoluciones, así que nosotros te compartimos lo más óptimo y mejor.

Solución:

Esto sucede a menudo durante el desarrollo cuando el formulario ya está abierto (en modo de edición, por ejemplo) e invoca la función docmd.OpenForm. En este caso, el formulario se coloca en modo normal (vista) y se generan los eventos OnOpen y OnLoad, pero la propiedad OpenArgs se establece en null no importa lo que haya pasado a docmd.OpenForm.

La solución obviamente es cerrar el formulario antes de invocarlo con docmd.OpenForm. Sin embargo, hay una solución que me gusta usar. En el evento OnOpen compruebo si me.OpenArgs es null y si lo es, lo reemplazo con algunos valores de depuración.

if not isnull(me.OpenArgs) then
   myvalue = me.OpenArgs
else
   msgbox "Debug mode"
   myValue = "foo"
endif

acabo de tener este problema. Él Arg string no se aprobó porque el informe ya estaba abierto, pero no visible. Se había dejado abierto cuando el código se estrelló con el Null string error.

La solución fue cerrar el informe en la ventana inmediata, con

Docmd.Close acReport, "myReport"

Reparó mi error y los argumentos se pasaron correctamente.

Una alternativa muy interesante a este argumento “openArgs” es usar la colección .properties del objeto currentProject.allforms(“myFormName”). Cuando necesite pasar un valor a un formulario (como un filtro heredado de otro control u otro formulario, por ejemplo), simplemente agregue la propiedad correspondiente para su formulario y agregue su valor a esta propiedad.

Ejemplo:

addPropertyToForm "formFilter","Tbl_myTable.myField LIKE 'A*'",myFormName

La función llamada intentará actualizar el valor de la propiedad “formFilter” del objeto. Si la propiedad no existe (se genera el error 2455), se agregará como una nueva propiedad en el código de gestión de errores.

Function addPropertyToForm(_ 
    x_propertyName as string, _
    x_value As Variant, _
    x_formName As String) 
As Boolean

On Error GoTo errManager
CurrentProject.AllForms(x_formName).Properties(x_propertyName).Value = x_value
addPropertyToForm = True
On Error GoTo 0

Exit Function

errManager:
If Err.Number = 2455 Then
    CurrentProject.AllForms(x_formName).Properties.Add x_propertyName, Nz(x_value)
    Resume Next
Else
    msgbox err.number & ". The property " & x_propertyName & "was not created"
End If

End Function 

Nos encantaría que puedieras recomendar esta sección si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *