Het automatisch sluiten van een formulier, indien een veld leeg is

Status
Niet open voor verdere reacties.

patje8610

Gebruiker
Lid geworden
23 aug 2005
Berichten
10
Ik heb een formulier gebaseerd op een query. Wat ik nu graag zou willen bereiken is hetvolgende. Als bij openen of laden van dat formulier het veld [werfID] leeg is: dat
1) het formulier gesloten wordt
2) een message box verschijnt
3) het bovenliggend formulier terug geopend wordt.

Daarvoor heb ik de volgende code geplaatst in het formulier 'bij laden':
Private Sub Form_Load()
If IsEmpty(werfID) Then
MsgBox "Geen werven gevonden die aan criteria voldoen"
DoCmd.OpenForm "frmSelectieOpLengte"
DoCmd.Close
Else
Exit Sub
End If
End Sub
Indien [werfID] leeg is voert access dit toch niet uit, maar geeft het formulier zonder data. Wat is hier fout in de code?
 
Je moet bij de DoCmd.Close even vertellen welk formulier je wilt sluiten (kun in de parameters opgeven).
Nu wordt het nieuwe formulier dat je opent met de DoCmd.OpenForm meteen weer gesloten.
 
werkt nog niet

code van knop in 'stuur'-formulier:
Private Sub btnKies_Click()
On Error GoTo Err_Knop4_Click

Dim stDocName As String
Dim stLinkCriteria As String
Forms!frmInvullenSelectieOpLengte.Visible = False

stDocName = "frmSelectieOpLengte"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Knop4_Click:
Exit Sub

Err_Knop4_Click:
MsgBox Err.Description
Resume Exit_Knop4_Click

End Sub

code 'bij laden' van gestuurd formulier:
Private Sub Form_Load()
If IsEmpty(werfID) Then
MsgBox "Geen werven gevonden die aan criteria voldoen"
Forms!frmInvullenSelectieOpLengte.Visible = True
DoCmd.Close , "frmSelectieOpLengte"
Else
Exit Sub
End If
End Sub

nog altijd hetzelfde resultaat: bij leeg wordt nog altijd het formulier frmSelectieOpLengte geopend zonder records. Indien niet leeg verloopt alles normaal.

'k Heb wel al gemerkt dat wanneer je met de wizard een knop aanmaakt en dan zelf nog wat code bijvoegt er altijd wel iets verkeerd loopt.
Mss eens zonder wizard proberen, hou je op de hoogte

toch dank voor de tip!
 
De DoCmd.Close is niet goed.

Moet zijn:
DoCmd.Close acForm, "frmSelectieOpLengte", acSaveNo
 
Kun je de database (of het onwillige deel ervan) misschien even posten? Dan kan er wat gerichter gezocht worden.
 
het formulier dat stuurt is eigenlijk een unbound form, met twee tekstvakken (niet-afhankelijk) in die een minimum en maximum lengte bevatten.
Deze stuurt een qry waarbij de gebouwen geselecteerd worden op lengte. Werkt perfect als er een match is. Maar 'k zou dus graag willen dat het gestuurde formulier niet geopend wordt als er geen gebouwen zijn die aan de gestelde criteria voldoen, maar in de plaats een message box en het 'stuurformulier'
 
Dat is heel simpel.
Ik begrijp dat je het formulier vanuit code opent.

Gebruik dan de dCount() functie om te kijken of er in het opgegeven bereik records zijn. Als er records zijn open je het formulier, als er geen records zijn open je het formulier gewoon niet. Dan hoef je het ook niet te sluiten als het geopend wordt zonder dat er records zijn want dat gebeurt dan gewoon niet meer.

Zo zie je maar weer hoe belangrijk het is wat meer te vertellen als alleen het technische probleem waar je toevallig tegenaan loopt. Vaak is het mogelijk om te zorgen dat het probleem zich niet voordoet in een stukje code dat veel eerder uitgevoerd wordt.
 
Dcount

Dag Bartuls,
nogmaals bedankt voor de tip.
mss ben ik een leek in vba maar heb gezocht naar code voor dcount en heb de onderstaande code gezet bij het onclick event van de knop die het tweede formulier stuurt:
Private Sub btnKies_Click()
Dim intAantal As Integer
intAantal = DCount("[werfID]", "qrySelectieOpLengte", "[lengte]>= " & Me.txtMin_lengte & " AND [lengte]<= " & Me.txtMax_lengte)
If IsNull(intAantal) Then
MsgBox "geen gebouwen met gekozen criteria", vbOKCancel
Else
DoCmd.OpenForm "frmSelectieOpLengte", acNormal
Forms!frmInvullenSelectieOpLengte.Visible = False
End If
End Sub

ik krijg telkens een fout in de lijn: intAantal=...

nochtans gezocht naar code voor dcount en het gebruik van "-jes en '-jes komt overeen met wat ik gevonden heb.

Kan je me verder helpen?
 
Ik vermoed dat het komt doordat je vierkante haken rond je velden hebt staan.
Die vierkante haken gebruik je alleen bij identificatie van zelf benoemde objecten.
Haal die eens weg.

Probeer ook eens een break te zetten in je code, run de code daarna en probeer dan in het immediate venster (op te roepen met CTRL+G in break mode) de dcount functie aan te roepen om te kijken of die de problemen veroorzaakt.

Post anders je mdb even, dan is het wat makkelijker om de fout eruit te halen.
 
wat is mis met dit stukje code

intAantal = DCount("[werfID]", "qrySelectieOpLengte", "[lengte] >= '" & strMin & "' AND [lengte] <= '" & strMax & "'")

als foutmelding krijg ik: fout 2001. U hebt de vorige bewerking geannuleerd.
 
opgelost

Dag Bartuls,
M'n probleem is opgelost, dankzij jouw tips, waarvoor dank.
'k had echter 2 fouten gemaakt met dcount.

1) ik had dcount gebaseerd op een query waarvoor parameters vereist waren (wat niet mag, kom ik net te lezen in de help), dus heb ik gezocht in de onderliggende tabel.

2) de selectie moest gebeuren op numerieke waarden en niet op strings.

Heb nu alles aangepast en het werkt perfect.

Nogmaals dank voor de tips.

patje8610
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan