Foutmelding bij fZoekOp functie

Status
Niet open voor verdere reacties.

kamphuuzz

Nieuwe gebruiker
Lid geworden
26 mei 2015
Berichten
4
Hallo,

Ik zit met het volgende probleem. In mijn database (die gebruikt word om nieuwe medewerkers te registreren) zit er achter het veld "personeelsnummer" een fZoekOp functie.
Echter, sinds vandaag werkt deze niet meer. Bij het verlaten van het veld word de functie opgeroepen maar komt de volgende foutmelding:
vba error.jpg

Hier is de code zoals ik deze gebruik:

Code:
Private Sub txtPersnummer_Exit(Cancel As Integer)
    If IsNull(Me.txtPersnummer) Then
        MsgBox "Er is geen personeelsnummer ingevuld", vbOKOnly
        Me.txtPersnummer.SetFocus
    Exit Sub
Else
    If fZoekOp(Me!txtPersnummer) Then
        MsgBox "Dit personeelsnummer is al in gebruik!", vbOKOnly
        Me.txtPersnummer.SetFocus
    End If
    End If
End Sub

Function fZoekOp(S As String) As Boolean
    Dim fld                      As Object
    With CurrentDb.OpenRecordset("tbl_Medewerkers")
        While Not .EOF And Not fZoekOp
            For Each fld In .Fields
                If fld.Value = S Then
                    fZoekOp = True
                    Exit For
                End If
            Next
            .MoveNext
        Wend
    End With
End Function

De lijn " If fld.Value = S Then" is geel gearceerd bij de foutoplossing. Iemand een suggestie waarom dit ineens niet meer werkt?
Afgelopen vrijdag werkte dit nog wel, maar vandaag niet meer. In de dagen er tussen is er (bij mijn weten) niets aan de DB veranderd.
 
Geen idee waarom het niet (meer) werkt. Als er niks in de omgeving is veranderd, is er iets in de data veranderd waarom het niet meer werkt. Je foutmelding zegt niet zo veel, ik zou eerder willen zien op welke regel hij stopt.
Overigens een functie die m.i. veel beter kan, maar dit terzijde.
 
error.jpg

Dit is de regel waar hij op fout gaat.

Welke functie zou je aanraden om te gebruiken i.p.v. de fZoekOp?
Het gaat mij erom dat als je een personeelsnummer invult, dat er een check op komt of het nummer al bestaat en of er überhaupt een nummer is ingevuld.

Mijn kennis van VBA is nog redelijk basic, dus alle tips & tricks zijn welkom.
 
Ik zou persoonlijk een functie maken die bij een nieuw nummer automatisch een nummer genereert (als dat mogelijk is op basis van de nummers) zodat je de hele check niet nodig hebt. En als je al checkt, doe dat dan met een functie die gelijk het nummer opzoekt i.p.v. een hele tabel door te snuffelen (zowel records als velden). Iets als:

Code:
    If fZoekOp(Persnummer, Me.txtPersnummer) Is True Then

En de functie wordt dan:
Code:
Function fZoekOp(Veld As String, Waarde As String) As Boolean
Dim strSQL As String
Dim fld As DAO.Field

    If InStr(1, Veld, " ") > 0 And InStr(1, Veld, "[") = 0 Then Veld = "[" & Veld & "]"
    strSQL = "SELECT " & Veld & " FROM tbl_Medewerkers WHERE "
    If IsNumeric(Waarde) Then
        strSQL = strSQL & Veld & " = " & Waarde
    ElseIf IsDate(Waarde) Then
        strSQL = strSQL & "CDate(" & Veld & ") = " & CDbl(Waarde)
    Else
        strSQL = strSQL & Veld & "= '" & Waarde & "'"
    End If
    With CurrentDb.OpenRecordset(strSQL)
        If Not .BOF = .EOF Then
            fZoekOp = True
        Else
            fZoekOp = False
        End If
    End With
End Function

Niet getest natuurlijk, want ik weet niet hoe je nummer er uit ziet. De functie is nu dynamisch, en voor elk willekeurig veld te gebruiken. En, veel belangrijker, je test maar op één veld in één record. En meer wil je ook niet. Lijkt mij.
 
Automatisch een nummer genereren is geen optie. Ik krijg het nummer van een andere partij aangereikt. Het gaat dus puur om de check of dat nummer al bestaat en bij het verlaten van het invoerveld of er een nummer is ingevuld.
Als ik straks wat meer tijd heb, zal je code eens checken.
 
Heb het voor elkaar met de code van OctaFish. Dank voor de hulp.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan