2009-03-31 11 views
5

Lavorando con qualche codice VBA in Access, quando viene soddisfatta una serie di condizioni molto specifiche, viene visualizzato un InputBox che richiede un numero intero. Fin qui tutto bene.VBA Not IsNull

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 

Il problema è che il Not IsNull sembra essere ignorato. Vorrei chiedere un valore da inserire a meno che non sia già presente un valore. Questo continua a spegnere InputBox fino a quando il minimo <> max e qtà < = condizioni min sono soddisfatte. Cosa mi manca qui?

+0

Ahh assomiglia il mio problema è comin g da qualche altra parte. – Terry

risposta

11

Se mrf è la variante, allora è inizialmente Empty, non Null. è necessario pertanto di utilizzare IsEmpty() funzione.

+1

Incredibile questo problema! +1 domani quando avrò più voti – Terry

+1

Un'altra opzione sarebbe quella di inizializzare mrf su null. Ho notato che non sta dichiarando alcuna delle sue variabili (min, max, mrf), che in generale è una cattiva idea. Attiva "Option Explicit" e eviterete un sacco di bug logici come questo. – JohnFx

4

No, il Not IsNull funziona perfettamente.

Ricorda, IsNull è una funzione che restituisce VERO se il parametro passato è nullo e falso in caso contrario.

Il tuo "Se non IsNull (MRF) Quindi" affermazione si traduce in inglese come "Se MRF non è nullo, allora"

Ciò significa quando MRF ha un valore, allora si sta l'elaborazione del codice all'interno del se la dichiarazione. Se desideri che il codice interno si attivi quando mrf IS è nullo, devi rimuovere lo NON dall'istruzione.

+0

LOL Ho avuto un momento. Grazie. – Terry

1

La mia ipotesi è che mrf non sia nullo, anche se è vuoto o qualcos'altro. Potrebbe anche essere Nothing, che è diverso da null in VBA land (penso). Prova a eseguire il codice nel debugger e osservando il valore di mrf. A seconda di cosa è mrf, puoi fare un test diverso (come check len (mrf) o not isNothing (mrf) o se è un intero, ed è init a zero, quindi mrf <> 0 .... ti viene l'idea . Speranza che aiuta!

+0

+1 domani, grazie! – Terry