2009-03-31 12 views
5

Trabajando con algo de código VBA en Access que cuando se cumpla un conjunto muy específico de condiciones que emitirá un InputBox pidiendo un número entero. Hasta aquí todo bien.VBA No EsNulo

Private Sub Command10_Click() 

    If Not IsNull(mrf) Then 
     If min <> max Then 
      If qty <= min Then 
       mrf = GetParamValue 
      End If 
     End If 
    End If 
    End Sub 

El problema es que el Not IsNull parece ser ignorado. Me gustaría pedir que se ingrese un valor a menos que un valor ya esté presente. Esto continúa activando el InputBox siempre que se cumplan las condiciones mínimas <> max y qty < = min. ¿Que me estoy perdiendo aqui?

+0

Ahh parece que mi problema es venir g de otro lugar. – Terry

Respuesta

11

Si mrf es la variante, entonces es inicialmente Empty, no Null. por lo tanto, tiene que usar IsEmpty() función.

+1

¡Impresionante esto lo arregló! +1 mañana cuando tenga más votos – Terry

+1

Otra opción sería inicializar mrf como nulo. Noté que no declara ninguna de sus variables (min, max, mrf), que en general es una mala idea. Active "Opción explícita" y evitará muchos errores de lógica como este. – JohnFx

4

No, el No EsNulo está funcionando perfectamente.

Recuerde, EsNulo es una función que devuelve TRUE si el parámetro que se le pasa es nulo, y falso en caso contrario.

Su "Si no IsNull (MRF) entonces" se traduce en Inglés como "Si MRF no es nulo y luego"

lo que esto significa es cuando MRF tiene un valor, entonces usted está procesando el código dentro de la si declaración. Si estás queriendo el código interno para disparar cuando MRF es nulo, entonces usted necesita para eliminar el NO de la declaración.

+0

LOL Tuve un momento. Gracias. – Terry

1

Mi conjetura es que MRF no es nulo, incluso si está vacío o alguna otra cosa. También podría ser Nothing, que es diferente de null en VBA Land (creo). Intenta ejecutar el código en el depurador y observa el valor de mrf. Dependiendo de lo MRF es decir, se puede hacer una prueba diferente (como comprobar len (MRF) o no IsNothing (MRF) o si es un número entero, y es init a cero, entonces MRF <> 0 .... se entiende la idea . Espero que ayude!

+0

+1 mañana también, gracias! – Terry