Access 2007 "autonummering" YY.MM.0000 per maand resetten

Status
Niet open voor verdere reacties.

Basenburgen

Gebruiker
Lid geworden
25 feb 2011
Berichten
59
Hallo,

ik ben bezig met een bonnensysteem te maken in Acces.
Ik heb een Tabel gemaakt met de boninformatie en wil de bonnen een eigen nummer geven met een eigen format; YY.MM.0000. Ieder bonnummer moet uiteraard uniek zijn en met 1 oplopen en per maand wil dat de nummering opnieuw begint.

(nog wat extra informatie;)
Ik heb al wat fora afgestruind naar een oplossing maar kom er niet helemaal uit (lees helemaal niet).
het jaartal en de maand kan ik natuurlijk uit de systeemtijd halen en het volgnummer genereren met een DMax +1 code. Echter krijg ik het niet voor elkaar om hem per maand te laten resetten.

In mijn tabel heb ik een veld BonID met een autonummering en een berekend veld dat het jaartal en maand en het volgnummer pakt.

Ik heb het idee dat er misschien toch wat programeer werk bij komt kijken...?
Zou iemand mij kunnen helpen?

Alvast bedankt en groeten,

Bas
 
Daar komt zeker programmeerwerk bij kijken, want je volgnummer is niet opvolgend. Een Autonummerveld gaat dan ook niet werken. Je zult een functie moeten maken die eerst een string maakt voor YY.MM. Vervolgens ga je in je tabel kijken wat het hoogste nummer is met die code. Dat kan met een DMax, maar omdat je toch een functie hebt, kun je net zo goed een query afschieten met de vba die dat regelt. Maakt in de praktijk niet zoveel uit.
Vervolgens moet je in de functie de laatste cijfers uit de code halen. Als je de opmaak met een punt scheidt, kan dat met InstrRev. Als het goed is, heb je nu een tekststring met 4 cijfers. Die string converteer je naar een getal, je telt er de waarde 1 bij op, en je converteert het resultaat terug naar een string (om de voorloopnullen te krijgen). Als laatste plak je de jaar- en maandcode er weer voor.
 
Hallo Michel,

hartelijk dank voor je reactie!
Ik heb geen kennis van VBA maar ben toch eerst zelf aan het stoeien geweest.
Maar ik snap er niks van...

heb je misschien nog tips/voorbeeld code?

alvast bedankt
 
Ik heb thuis al een voorbeeldje gemaakt; dat zal ik vanavond posten!
 
En hier is de beloofde functie... Je kunt hem in elke module zetten die je wilt. Heb je nog geen module, dan kun je die invoegen in het VBA venster, of vanuit het hoofdscherm van Access.

Code:
Function VolgNummer(Veld As String, Tabel As String) As String
Dim strSQL As String
Dim sFilter As String
Dim sNum As String
Dim iNum As Integer

If InStr(1, Veld, " ") > 0 And Left(Veld, 1) <> "[" Then Veld = "[" & Veld & "]"
If InStr(1, Tabel, " ") > 0 And Left(Tabel, 1) <> "[" Then Tabel = "[" & Tabel & "]"

sFilter = Format(Date, "yy") & "." & Format(Date, "mm") & "."
strSQL = "Select NZ(Max(" & Veld & "),0) FROM " & Tabel & " "
strSQL = strSQL & "WHERE Left(" & Veld & ",6) ='" & sFilter & "'"

With CurrentDb.OpenRecordset(strSQL)
    If .RecordCount > 0 Then
        On Error Resume Next
        sNum = Mid(.Fields(0), InStrRev(.Fields(0), ".") + 1)
        iNum = CInt(sNum) + 1
        sNum = Right("0000" & iNum, 4)
        VolgNummer = sFilter & sNum
    Else
        VolgNummer = sFilter & "0001"
    End If
End With
    
End Function


Je kunt hem op een formulier gebruiken, of in een query. In een formulier kun je een tekstveld een standaardwaarde geven:
=VolgNummer("VolgNummer";"tblActie")

Zoals je in de functie-aanroep kunt zien, worden er twee variabelen gevraagd: Veld en Tabel. Deze worden gebruikt om de gewenste tabel en het veld aan te geven waarop de nummering moet zijn gebaseerd.
Deze twee variabelen geef je dan ook mee als je de functie gaat gebruiken.
 
Sorry tijdje eruit geweest door ziekte :S
Ik ben nog lekker aan het stoeien geweest, maar sorry ik kom er nog steeds niet uit... :(
Ik heb een module gemaakt in (access) VBA met de naam VolgNummer.
Als ik de standaardwaarde instel krijg ik een fout dat hij de functie niet kan vinden/niet bestaat. (terwijl hij gewoon wordt weergegeven in het linker venster.)
Heb je misschien nog tips/weet je wat ik fout doe?

nogmaals bedankt
 
Je moet de module niet dezelfde naam geven als de functie in de module. Noem de module bv modVolgnummer.
 
bedankt voor de tip! :)
hij doet het nog steeds niet.... :(
heb de module gewoon standaard opgeslagen (module1).
kan dat tblActie er ook iets mee te maken hebben?
 
Mijn voorbeeldje is, zoals de naam eigenlijk al zegt, een voorbeeldje ;) Je moet dus de veldnaam en de tabelnaam aanpassen aan je eigen situatie.
 
Dat snap ik :D
hehehe ik ben alleen een leek met VBA dus ik snap niet goed welke onderdelen ik moet aanpassen.

Stel mijn tabelnaam is; TBL_Bonnen en het veld Bonnummer.
Hoe zou ik het dan moeten doen? :$
 
Dan zet je dit in de besturingselementbron van een tekstvak:
=VolgNummer("Bonnummer";"TBL_Bonnen")
 
ow wat een prutser ben ik... hij geeft nog steeds de foutmelding...
moet ik in de module ook nog wat veranderen?
 
Waarschijnlijk zit je toch met verkeerde velden te stoeien, of begin je op een leeg veld. De foutcontrole is nog een beetje onder de maat (afwezig namelijk) dus bij verkeerde gegevens gaat het nog wel eens fout. In dit voorbeeldje zie je het in ieder geval werkend...
 

Bijlagen

aaahhaaaa ik zie "al" wat ik fout deed!
Ik maakt in de tabel een tekst veld voor de tabel en veranderde hier de standaardwaarde.
Maar in het voorbeeld bestandje heb je dat pas in het formulier gedaan!
Briljant, hij doet het!
onzettend bedankt!!!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan