Tuurlijk! De belangrijkste regels:
Code:
sInit = DLookup("Initialen", "Gebruikers", "GebruikerID=" & UserID)
If sInit & "" = "" Then sInit = "XX"
Haalt de initialen op van de ingelogde gebruiker. Gaat dat fout om wat voor reden dan ook, dan wordt daarvoor de tekst XX gebruikt.
Code:
strSQL = "SELECT DISTINCT TOP 1 [" & Veld & "] FROM [" & Tabel & "] " _
& "WHERE InStr(1, [Offertenummer],'" & sInit & "') >0 "
strSQL = strSQL & "ORDER BY [" & Veld & "] DESC"
Deze code maakt een SQL die met Instr() de initialen opzoekt. Het hoogste nummer moet alleen worden opgezocht van de specifieke werknemer, dus daar moet je op filteren.
Code:
With CurrentDb.OpenRecordset(strSQL)
On Error Resume Next
If .RecordCount > 0 And Nz(.Fields(0).Value, 0) <> 0 Then
strVolgNummer = .Fields(0).Value
Else
strVolgNummer = Format(0, "0000")
End If
End With
Hier kijk je of er wat gevonden is of niet. Als dat niet het geval is, dan een standaarwaarde in strVolgnummer.
Code:
If InStr(strVolgNummer, "-") > 0 Then
tmpNummer = Split(strVolgNummer, "-")
If CInt(Left(tmpNummer(UBound(tmpNummer)), 4)) = Year(Date) Then
strNieuwVolgNummer = _
CInt(Left(tmpNummer(UBound(tmpNummer)), 4)) & _
sInit & _
Right("0000" & CInt(Right(tmpNummer(UBound(tmpNummer)), 4)) + 1, 4)
Else
strNieuwVolgNummer = Year(Date) & sInit & CStr("0001")
End If
Else
strNieuwVolgNummer = Year(Date) & sInit & CStr("0001")
End If
Hier kijk je eerst of er een koppelteken in het nummer zit. Alles links ervan heb je niet nodig,dus met SPLIT scheid je de tekst op koppelteken. Je krijgt nu een matrix variabele met een aantal elementen. (2 waarschijnlijk). In de laatste zit het eigenlijke nummer, dus dat ga je verder bewerken.
Code:
If CInt(Left(tmpNummer(UBound(tmpNummer)), 4)) = Year(Date)
Hier kijk je of de eerste 4 tekens van het volgnummer gelijk zijn aan het huidige jaar. Zo ja: doorgaan!
Een matrix variabele kan bij 1 beginnen te tellen, of bij 0. Dat leg je zelf vast met de regel Option Base 1 als je niet bij 0 wilt starten. Als je met 1 begint, dan is de hoogste waarde van de matrix 2, en anders 1. Omdat je dat zeker wilt weten, gebruik je UBound(matrix) om die waarde uit te lezen. UBound(tmpNummer) levert dus een getal op, en wel van de hoogste matrix waarde. Daar heb je de waarde van nodig, dus dan krijg je: tmpNummer(UBound(tmpNummer)). En dat levert je string op. De eerste 4 cijfers daarvan zijn het jaar, en de laatste 4 het volgnummer. Dus die pak je met:
Code:
Right(tmpNummer(UBound(tmpNummer)), 4)
Die zet je, om het verhaal af te maken, om naar een getal, en daar tel je 1 bij op.
Code:
CInt(Right(tmpNummer(UBound(tmpNummer)), 4)) + 1
Het volledige volgnummer bouw je dus op uit 3 delen: jaar (Left stuk), Initiaal (sInit) en volgnummer (Right stuk)
Code:
strNieuwVolgNummer = CInt(Left(tmpNummer(UBound(tmpNummer)), 4)) & sInit & Right("0000" & CInt(Right(tmpNummer(UBound(tmpNummer)), 4)) + 1, 4)
En uiteindelijk zet je daar "Off-" voor.