Loop door textvelden in formulier, maar Access geeft geen waarde weer.

Status
Niet open voor verdere reacties.

allard1

Gebruiker
Lid geworden
5 dec 2006
Berichten
314
Beste allemaal,

Ik heb een loop geschreven om door de textvelden in een formulier te gaan. Dit om te checken of de waardes zijn gevuld. Zo niet, dan krijgt het veld een kleurtje. Ik gebruik onderstaande code:
Code:
Sub Check_gegevens_toevoegen()
Dim ctl As Control


For Each ctl In Form_FrmVerbeteridee.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox
ctl.SetFocus

If ctl.Value = Null Then
ctl.BackColor = vbWhite
End If

End Select
Next ctl
End Sub

Gebruik ik de If Statement niet, dan krijgt alles een kleurtje. Maar ik wil natuurlijk de controls kleuren die geen antwoord hebben gekregen. Maar Access geeft aan dat de velden wel gevuld zijn, terwijl dit niet zo is.

Wie kan mij helpen?

Groet,
Allard
 
Vervang dit eens

Code:
If ctl.Value = Null Then
ctl.BackColor = vbWhite
End If

Voor

Code:
If IsNull(ctl.Value) Then
    ctl.BackColor = vbRed
Else
    ctl.BackColor = vbWhite
End If
 
Vervang dit eens

Code:
If ctl.Value = Null Then
ctl.BackColor = vbWhite
End If

Voor

Code:
If IsNull(ctl.Value) Then
    ctl.BackColor = vbRed
Else
    ctl.BackColor = vbWhite
End If

That did the trick......Hij doet nu wat hij moet doen. Alleen ik snap de volgorde niet helemaal. Wat is het verschil (naast IsNull) tussen jouw verbetering en mijn eerste idee?
 
Je laatste vraag verdient uiteraard nog wel een antwoord, al is het een beetje een technisch verhaal vrees ik. In essentie komt het hier op neer:
Met =Null check je puur de Inhoud van een variabele, of een object. Een vergelijking met =Null levert TRUE, of FALSE op als uitkomst. Echter: als een object of variabele als zodanig nog niet vindbaar is voor Access (hij is nog niet gevuld), dan valt er ook nog weinig te checken. Er volgt dan dus een foute vergelijking. Je kunt een variabele dus eerst met SET Variabele = Null leegmaken, waarna je de check in een latere fase wel correct kunt uitvoeren.

Met IsNull (of in queries Is Null) controleer je niet alleen op de Inhoud, maar ook op het bestaan van de variabele of het object. In het laatste geval is het dus al voldoende als de variabele of het object bestaat; de check met IsNull levert dan in beginsel altijd TRUE op; tenzij er uiteraard een waarde aan het object is toegekend, dan is de vergelijking FALSE.

Om ellende dus te voorkomen, kun je het beste altijd op ISNULL of IS NULL checken.

De echte database puristen zullen me om deze uitleg wel weer afbranden, maar soms moet je de zaken iets simpeler voorstellen dan ze in werkelijkheid zijn... ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan