Ik ben een studentenadministratie aan het opzetten in Access. Tot nu toe weinig problemen gehad, maar van VBA heb ik weinig kaas gegeten...
1 van de onderdelen van de administratie is het formulier "Student," gekoppeld aan de tabel "Student." Wanneer dit formulier wordt ingevuld wordt gelijk een "Studentnummer" aangemaakt dmv autonummering.
Dit studentnummer is dus oplopend. Tot zo ver geen probleem, echter ieder jaar of eventueel zelfs maand moet dit kunnen worden gewijzigd.
Stel: 1 januari 2007 is het eerste studentnummer 2007001, de 2e student krijgt dan 2007002 etc. Maar in 2008 moeten de studentnummers worden: 2008001, 2008002 etc. Hoop dat dit een beetje duidelijk is?!
Nu kan dit op een vervelende, omslachtige, handmatige manier iedere keer worden aangepast, maar niet door mensen die erg weinig verstand hebben van Access...
Ik wil het op een andere manier oplossen nadat ik een scriptje tegenkwam, die ik kan gebruiken. Ik moet het script echter invullen, maar heb geen idee wat en hoe. Het is misschien heel simpel, maar ik kom er niet uit.
De manier waarop het kan is als volgt:
Ik heb een formulier gemaakt genaamd: "Nieuw volgnummer"
Dit formulier bestaat uit 2 tekstvakken, de 1e is "Hoogste waarde." In dit tekstvak wordt zodra het formulier wordt geopend, gezocht in het formulier "Student" naar het laatste (en tevens het hoogste)
"Studentnummer" en weergegeven, bijvoorbeeld 2007045. Dit vak kan niet worden gewijzigd.
Het tweede vak heet: "Nieuwe waarde." In dit vak moet de nieuwe waarde worden ingevuld, bijvoorbeeld 2008001. Wanneer dan op ok wordt gedrukt dan wordt de autonummering "Studentnummer" aangepast in het formulier "Student" en dus ook in tabel "Student." Athans, zo zou het moeten werken. De macro's kloppen volgens mij?!
Het enige wat ik nu nog nodig heb is een VBA script. Dit heb ik gevonden, maar moet nog naar mijn situatie worden aangepast. Vraag is dus of iemand mij hierbij kan en wil helpen?
Ik hoop niet dat ik gemakzuchtig overkom, maar ik kom er echt niet uit. Hoop dat jullie het verhaal een beetje snappen..
Het VBAscript is:
Function NieuwAutoNummer(Tabelnaam As String, Veldnaam As String, NieuwNummer As Long)
' auteur: Ben Groenendijk maart 2000
' procedure die automatisch een nieuwe beginwaarde aan een veld met autonumering geeft.
' aanroepvoorbeeld: NieuwAutonummer("Klant", "Klantnr", 20000)
' 1ste parameter is de tabelnaam, 2de parameter de veldnaam en de 3de parameter de nieuwe waarde.
'!! Krijgt u een compileer fout tijdens de uitvoering van deze module,
' dan: selecteer via de menubalk Uitvoeren, Beginwaarden. Vervolgens via de menubalk
' Extra, Verwijzingen de optie Microsoft DAO 3.6 Object Library aanvinken.
On Error GoTo NieuwAutoNummerErr
Dim dbsHuidigeDatabase As Database
' Huidige database selecteren.
Set dbsHuidigeDatabase = CurrentDb()
' nieuw record toevoegen aan het bestand met de nieuw gekozen waarde minus de waarde 1 dbsHuidigeDatabase.Execute "INSERT INTO " & Tabelnaam & "(" & Veldnaam & ") VALUES (" _
& NieuwNummer - 1 & ");"
' zojuist toegevoegde record verwijderen. dbsHuidigeDatabase.Execute "DELETE * FROM " & Tabelnaam & " WHERE " & Veldnaam & _
" = " & NieuwNummer - 1 & ";"
Set dbsHuidigeDatabase = Nothing
NieuwAutoNummerExit:
Exit Function
NieuwAutoNummerErr:
Select Case Err
Case 3127
MsgBox "U hebt een niet bestaande veldnaam ingevoerd.", vbCritical, "Foutboodschap"
Case Else
MsgBox "Fout: " & Err & ", " & Error
End Select
Resume NieuwAutoNummerExit
End Function
1 van de onderdelen van de administratie is het formulier "Student," gekoppeld aan de tabel "Student." Wanneer dit formulier wordt ingevuld wordt gelijk een "Studentnummer" aangemaakt dmv autonummering.
Dit studentnummer is dus oplopend. Tot zo ver geen probleem, echter ieder jaar of eventueel zelfs maand moet dit kunnen worden gewijzigd.
Stel: 1 januari 2007 is het eerste studentnummer 2007001, de 2e student krijgt dan 2007002 etc. Maar in 2008 moeten de studentnummers worden: 2008001, 2008002 etc. Hoop dat dit een beetje duidelijk is?!
Nu kan dit op een vervelende, omslachtige, handmatige manier iedere keer worden aangepast, maar niet door mensen die erg weinig verstand hebben van Access...
Ik wil het op een andere manier oplossen nadat ik een scriptje tegenkwam, die ik kan gebruiken. Ik moet het script echter invullen, maar heb geen idee wat en hoe. Het is misschien heel simpel, maar ik kom er niet uit.
De manier waarop het kan is als volgt:
Ik heb een formulier gemaakt genaamd: "Nieuw volgnummer"
Dit formulier bestaat uit 2 tekstvakken, de 1e is "Hoogste waarde." In dit tekstvak wordt zodra het formulier wordt geopend, gezocht in het formulier "Student" naar het laatste (en tevens het hoogste)
"Studentnummer" en weergegeven, bijvoorbeeld 2007045. Dit vak kan niet worden gewijzigd.
Het tweede vak heet: "Nieuwe waarde." In dit vak moet de nieuwe waarde worden ingevuld, bijvoorbeeld 2008001. Wanneer dan op ok wordt gedrukt dan wordt de autonummering "Studentnummer" aangepast in het formulier "Student" en dus ook in tabel "Student." Athans, zo zou het moeten werken. De macro's kloppen volgens mij?!
Het enige wat ik nu nog nodig heb is een VBA script. Dit heb ik gevonden, maar moet nog naar mijn situatie worden aangepast. Vraag is dus of iemand mij hierbij kan en wil helpen?
Ik hoop niet dat ik gemakzuchtig overkom, maar ik kom er echt niet uit. Hoop dat jullie het verhaal een beetje snappen..
Het VBAscript is:
Function NieuwAutoNummer(Tabelnaam As String, Veldnaam As String, NieuwNummer As Long)
' auteur: Ben Groenendijk maart 2000
' procedure die automatisch een nieuwe beginwaarde aan een veld met autonumering geeft.
' aanroepvoorbeeld: NieuwAutonummer("Klant", "Klantnr", 20000)
' 1ste parameter is de tabelnaam, 2de parameter de veldnaam en de 3de parameter de nieuwe waarde.
'!! Krijgt u een compileer fout tijdens de uitvoering van deze module,
' dan: selecteer via de menubalk Uitvoeren, Beginwaarden. Vervolgens via de menubalk
' Extra, Verwijzingen de optie Microsoft DAO 3.6 Object Library aanvinken.
On Error GoTo NieuwAutoNummerErr
Dim dbsHuidigeDatabase As Database
' Huidige database selecteren.
Set dbsHuidigeDatabase = CurrentDb()
' nieuw record toevoegen aan het bestand met de nieuw gekozen waarde minus de waarde 1 dbsHuidigeDatabase.Execute "INSERT INTO " & Tabelnaam & "(" & Veldnaam & ") VALUES (" _
& NieuwNummer - 1 & ");"
' zojuist toegevoegde record verwijderen. dbsHuidigeDatabase.Execute "DELETE * FROM " & Tabelnaam & " WHERE " & Veldnaam & _
" = " & NieuwNummer - 1 & ";"
Set dbsHuidigeDatabase = Nothing
NieuwAutoNummerExit:
Exit Function
NieuwAutoNummerErr:
Select Case Err
Case 3127
MsgBox "U hebt een niet bestaande veldnaam ingevoerd.", vbCritical, "Foutboodschap"
Case Else
MsgBox "Fout: " & Err & ", " & Error
End Select
Resume NieuwAutoNummerExit
End Function