jaar + volgnummer in tabel

Status
Niet open voor verdere reacties.

jeroenSturm

Gebruiker
Lid geworden
2 mei 2012
Berichten
197
hallo mensen ,

ik heb een vervolgnummer en een jaar die bij mekaar horen in 2 verschillende tekstvakjes,

hij doet nu automatische het jaar maken en automatische het maximale van het volgnummer +1.
maar als het nu 2013 word gaat hij verder waar hij gebleven is als bijvoorbeeld het laatste was 2012 065 dan gaat hij in 2013 verder met 2013 066.
maar dat wil ik niet hoe kan ik dit verhelpen


m.v.g. jeroenSturm
 
Daar heb je een functie voor nodig:

Code:
Function NieuwVolgNummer(Veld As String, Tabel As String) As String
Dim strVolgNummer As String
Dim strNieuwVolgNummer As String
Dim strSQL As String
Dim tmpNummer

    '------------------------------------------------------------------------------------------------
    ' Huidige volgnummer uit tabel lezen die als parameter is meegegeven.
    '------------------------------------------------------------------------------------------------
    strSQL = "SELECT TOP 1 [" & Veld & "] FROM [" & Tabel & "] "
    strSQL = strSQL & "ORDER BY [" & Veld & "] DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount > 0 And Nz(.Fields(0).Value, 0) <> 0 Then
            strVolgNummer = .Fields(0).Value
        Else
            strVolgNummer = Format(0, "0000")
        End If
    End With
    
    '------------------------------------------------------------------------------------------------
    ' Kijken of er een koppelteken in het volgnummer zit; vervolgens nieuw nummer maken.
    '------------------------------------------------------------------------------------------------
    If InStr(strVolgNummer, "-") > 0 Then
        tmpNummer = Split(strVolgNummer, "-")
        If CInt(tmpNummer(0)) = Year(Date) Then
            strNieuwVolgNummer = Format(tmpNummer(0) & Format(tmpNummer(1) + 1, "000"), "0000-000")
        Else
            strNieuwVolgNummer = Format(Year(Date) & Format(1, "000"), "0000-000")
        End If
    Else
        strNieuwVolgNummer = Format(Year(Date) & Format(1, "000"), "0000000")
    End If
    
    '------------------------------------------------------------------------------------------------
    ' Nieuw nummer toekennen aan de functie.
    '------------------------------------------------------------------------------------------------
    NieuwVolgNummer = strNieuwVolgNummer

End Function

Deze functie kijkt naar de tabel met het volgnummer, en het veld met het volgnummer. Vervolgens wordt op basis van het nummer en jaar een nieuw nummer gegenereerd.
Op het formulier gebruik je 'm zo:

Code:
Private Sub Form_Current()
    If Me.NewRecord = True Then
        Me.Ordernummer = NieuwVolgNummer("Ordernummer", "Ordertabel")
    End If
End Sub
Hierbij is Me.Ordernummer een tekstvak met het nummer, en Ordernummer het veld uit de tabel Ordertabel. De opmaak van het nummer is in mijn geval: ####-### oftewel: 2012-004 etc.
 
Da's knap, want daarmee kun je volgens mij alleen de laatste waarde ophalen; ik ben benieuwd hoe je daarmee bij het begin van een nieuw jaar overnieuw begint te tellen. Misschien kun je dat nog even uitleggen?
 
dan moet je bij het nieuwe jaar wel even zelf automatische even 000 invoeren en dan begnt hij weer opniet want ik gebruik Dlast +1
 
Dat is dus een beetje knullig automatiseren; hij moet dat (en doet dat met mijn functie) natuurlijk helemaal zelf regelen. Lijkt mij...
 
heei octafish per toeval was ik mijn oude berichten op het forum aan het doorlezen toen kwam ik jou volgnummer functie tegen maar ik snap hem niet helemaal...
waar moet ik die functie plaatsen,de een in het formulier maar waar die ander.. en dit heb ik er nui van gemaakt weet niet of het goed is ..

Code:
Function NieuwVolgNummer(Veld As String, Tabel As String) As String
Dim strVolgNummer As String
Dim strNieuwVolgNummer As String
Dim strSQL As String
Dim tmpNummer

    '------------------------------------------------------------------------------------------------
    ' Huidige volgnummer uit tabel lezen die als parameter is meegegeven.
    '------------------------------------------------------------------------------------------------
    strSQL = "SELECT TOP 1 [" & Veld & "] FROM [" & Tabel & "] "
    strSQL = strSQL & "ORDER BY [" & Veld & "] DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount > 0 And Nz(.Fields(0).Value, 0) <> 0 Then
            strVolgNummer = .Fields(0).Value
        Else
            strVolgNummer = Format(0, "0000")
        End If
    End With
    
    '------------------------------------------------------------------------------------------------
    ' Kijken of er een koppelteken in het volgnummer zit; vervolgens nieuw nummer maken.
    '------------------------------------------------------------------------------------------------
    If InStr(strVolgNummer, "-") > 0 Then
        tmpNummer = Split(strVolgNummer, "-")
        If CInt(tmpNummer(0)) = Year(Date) Then
            strNieuwVolgNummer = Format(tmpNummer(0) & Format(tmpNummer(1) + 1, "000"), "0000-000")
        Else
            strNieuwVolgNummer = Format(Year(Date) & Format(1, "000"), "0000-000")
        End If
    Else
        strNieuwVolgNummer = Format(Year(Date) & Format(1, "000"), "0000000")
    End If
    
    '------------------------------------------------------------------------------------------------
    ' Nieuw nummer toekennen aan de functie.
    '------------------------------------------------------------------------------------------------
    NieuwVolgNummer = strNieuwVolgNummer

End Function


Code:
Private Sub Form_Current()
    If Me.NewRecord = True Then
        Me.volgnummer = NieuwVolgNummer("volgnummers", "Factuur_overzicht")
    End If
End Sub

moet ik nu in die functie ook nog dingen aanpassen of niet?? zoja waar
 
Laatst bewerkt:
Die functie zet je in een willekeurige module, als je hem vanuit meerdere formulieren wilt kunnen aanroepen. Zoals je hem nu gebruikt, zou het goed moeten gaan. Of jouw aanpassing werkt? Dan zou ik eerst moeten zien hoe je wilt dat het nummer er uit ziet. Deze variant gebruikt een koppelstreepje.
 
het nummer zou er hetzelfde uit moeten zien als bij jou bijv. 2013-001

maar er gebuerd helemaal niks.
 
het veld waar ik het inzet blijft helemaal leeg weet niet hoe dat kan komen...
als ik zelf een fout genereer in die code dan geeft hij wel een error aan dus hij voert de code wel uit maar geeft niks terug...
wat zou het probleem kunnen wezen ..
in de code kan ik ook niet zo 1..2..3.. een fout vinden..
 
Laatst bewerkt:
Je kunt de code nog eens als standaardwaarde proberen. Dan zet je in die regel:
= NieuwVolgNummer("volgnummers", "Factuur_overzicht")
Wel dan uiteraard de Form_Current verwijderen of uitschakelen.
 
dit is wat ik terugkrijg : foutmelding access.PNG
ik kan er geen fout uit opmaken uit dat stukje code wat ik in de default value zet ??
 
ah heb IETS voor mekaar gekregen door de functie in modules toe te voegen en dan opvragen in default value maar dan krijg ik in het veld "#Name?" terug????? wat nu weer
 
Laatst bewerkt:
Als je de formule letterlijk hebt gekopieerd, moet je misschien de komma's vervangen door puntkomma's. In VBA is de komma het scheidingsteken, in functies dus een puntkomma. Ook afhankelijk trouwens van de taalversie.
 
had ik al veranderd maar het mocht niet baten, maar dan krijg ik die foutmelding van "#name?" ?
weet je die ook nog op te lossen? :D
 
Laatst bewerkt:
ik weet niet of je tijd en zin heb om een klein voorbeeld bestand uit te schrijven voor me ??
dan kan ik dat vergelijken met wat ik heb en zo misschien tot een oplossing komen :D
 
Als je, zoals in de oorspronkelijke vraag, nummers wilt maken in deze lijn:
2012-326
2012-327
2012-328
2013-001
2013-002
dan moet je deze functie gebruiken:
Code:
Function NieuwVolgNummer(Veld As String, Tabel As String) As String
Dim strVolgNummer As String
Dim strNieuwVolgNummer As String
Dim strSQL As String
Dim tmpNummer As Variant
Dim tmp

    '------------------------------------------------------------------------------------------------
    ' Huidige volgnummer uit tabel lezen die als parameter is meegegeven.
    '------------------------------------------------------------------------------------------------
    strSQL = "SELECT TOP 1 [" & Veld & "] FROM [" & Tabel & "] ORDER BY [" & Veld & "] DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If .RecordCount > 0 Then
            strVolgNummer = .Fields(0).Value
        Else
            strNieuwVolgNummer = "001"
        End If
    End With
    
    '------------------------------------------------------------------------------------------------
    ' Kijken of er een koppelteken in het volgnummer zit; vervolgens nieuw nummer maken.
    '------------------------------------------------------------------------------------------------
    If InStr(strVolgNummer, "-") > 0 Then
        tmpNummer = Split(strVolgNummer, "-")
        If CInt(tmpNummer(LBound(tmpNummer))) = Year(Date) Then
            strNieuwVolgNummer = CStr(tmpNummer(LBound(tmpNummer))) & "-" & Right("000" & CInt(tmpNummer(UBound(tmpNummer))) + 1, 3)
        Else
            strNieuwVolgNummer = Year(Date) & "-" & "001"
        End If
    Else
        strNieuwVolgNummer = Year(Date) & "-" & strNieuwVolgNummer
    End If
    
    '------------------------------------------------------------------------------------------------
    ' Nieuw nummer toekennen aan de functie.
    '------------------------------------------------------------------------------------------------
    NieuwVolgNummer = strNieuwVolgNummer

End Function
De vorige functie was nogal ingewikkeld qua opbouw, en daarom deed hij waarschijnlijk niet wat je wilde. Dat zou met de nieuwe functie over moeten zijn.
Gebruik is verder simpel, dus
Code:
=NieuwVolgNummer("volgnummers"; "Factuur_overzicht")
als standaarwaarde op het veld Volgnummer in je formulier moet dan werken.
 
hmmm toch niet de eerste doet hij heel vrolijk wel maar daarna krijg ik een foutmelding

Run-time error '94':
Invalid use of Null

en als ik dan op debug druk word dit geel in de vba
Code:
strVolgNummer = .Fields(0).Value
wat doe ik nu weer verkeerd

word er echt niet goed van
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan