Toon posts:

[Access2000] exit sub???

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ga bepaalde ingevoerde gegevens vergelijken in een formulier. Een gebruiker vult een datum in die groter is dan de huidige datum. Dit mag niet en er komt een message box. Hierna vult hij een correcte datum in, maar nog steeds komt deze message box. Dit is omdat de sub niet verlaten wordt. Ik wil dat als er op de knop geklikt wordt de datum wordt gecontroleerd en na het verschijnen van de message box moet hij weer opnieuw gaan controleren na een klik op de knop.
Hoe?

code:
Dim stDocName As String
Dim dat As Date

dat = datum.Value

If dat > Date Then
MsgBox "Vul een datum in die kleiner of gelijk is aan " & Date
DoCmd.GoToControl "datum"
'Exit sub werkt niet!
Else
stDocName = "Query opslaan uren invullen"
DoCmd.OpenQuery stDocName, acNormal, acEdit
DoCmd.Close
Forms![Form werknemer2].uren.Requery
Forms![Form werknemer2].[ziek/te laat].Requery
End If

  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
En waarom werkt je exit sub niet dan? Mischien omdat je exit function moet gebruiken :?

Wat voor een foutmelding krijg je als je dat wel doet dan?
Mischien kan je je datum vergelijking beter met datedif doen.

Verwijderd

Topicstarter
Private Sub Knop19_Click()
On Error GoTo Err_Knop19_Click

code.......

Exit_Knop19_Click:
Exit Sub

Err_Knop19_Click:
If Err.Description = "Ongeldig gebruik van Null" Then
MsgBox "Vul alle velden in a.u.b."
Else: MsgBox Err.Description
End If
Resume Exit_Knop19_Click

End Sub

Verwijderd

Waarom doe je het niet direct, weet je zeker dat de datumvergelijking goed gaat.
Tip: gebruik een mgsbox of debug.print om te kijken of de datumvergelijking werkt
Visual Basic .NET:
1
2
3
4
5
6
7
'Dim dat As Date

'dat = datum.Value

If me.datum.Value > Date Then
  debug.print "datum is groter dan date"
..

Verwijderd

Topicstarter
De controle werkt perfect, al getest. Als je een grotere datum dan de huidige datum intikt krijg je message box. Dan ff pop-up venster sluiten en weer opnieuw laden. Dan goed datum en het gaat goed. Maar ik wil dat je meteen na intikken van correcte datum verder kan gaan met uitvoeren van de code. Dus hij controleert maar 1 keer en gaat verder met die code zonder weer boven aan de code te beginnen.

Verwijderd

recursief maken; dus sub gewoon weer aanroepen in de code

Visual Basic .NET:
1
Knop19_Click()


denk dat ie dan blijft loepen. met functies (ipv sub) kun je een waarde meegeven waardoor loop stopt 8)7

[ Voor 38% gewijzigd door Verwijderd op 13-12-2002 16:58 ]


Verwijderd

Topicstarter
is dat exacte code?

Verwijderd

leg eens uit wat er nou precies moet gebeuren, volgens mij kan het allemaal veel makkelijker...

Verwijderd

Topicstarter
Ik wil in een form een datum die in een tekstvak staat laten controleren of deze groter is dan de huidige datum. Dan klik op knop om een querie uit te voeren. Bij het drukken op knop controleert hij de datum. Bij fout krijg je msgbox en keer je terug naar form. Voer je dan een goede datum in dan en klikt op knop dan zegt ie nog steeds dat de datum fout, groter dan huidige datum is. Dit moet niet. De controle heb ik getest en werkt goed. Maar na de message box moet je de goede datum invoeren en daarna moet hij opnieuw testen na druk op de knop dit doet hij niet. Hij gaat verder met code waar hij is gebleven. Maar hij moet opnieuw testen en daarom opnieuw knop19_clcik uitvoeren.

[ Voor 2% gewijzigd door Verwijderd op 13-12-2002 17:07 . Reden: typefouten ]


Verwijderd

Topicstarter
het kan in de validatie maar dat wil ik niet omdat ik nog meer dingen met controleren van deze datum en dit is er 1 van.

Verwijderd

Waarom zet je geen datumcontrole op het invoerveld?

Visual Basic .NET:
1
sub me.datum.AfterUpdate()


alternatief is toch alle code onder knop.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub mijnKnoppie()
if me.veld1=waarde then
  if me.veld2=waarde then
    'alles goed doorgaan
  else
    msgbox ....
    me.veld2.setFocus
  end if
else
    msgbox ....
    me.veld1.setFocus
end if
end Sub

[ Voor 61% gewijzigd door Verwijderd op 13-12-2002 17:33 ]


  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Private Sub Knop19_Click()
On Error GoTo Err_Knop19_Click

Dim stDocName As String
Dim dat As Date

dat = datum.Value

If dat > Date Then
  MsgBox "Vul een datum in die kleiner of gelijk is aan " & Date
  DoCmd.GoToControl "datum"
  'Exit sub werkt niet!
Else
  stDocName = "Query opslaan uren invullen"
  DoCmd.OpenQuery stDocName, acNormal, acEdit
  DoCmd.Close
  Forms![Form werknemer2].uren.Requery
  Forms![Form werknemer2].[ziek/te laat].Requery
End If

Exit_Knop19_Click:
  Exit Sub

Err_Knop19_Click:
  If Err.Description = "Ongeldig gebruik van Null" Then
  MsgBox "Vul alle velden in a.u.b."
Else 
  MsgBox Err.Description
End If
Resume Exit_Knop19_Click

End Sub


Ok dit dus is je code :?
Ik snap echt niet waarom je éxit sub'niet werkt. Als je die nu eens uit de rem haalt, dan kijken we zo wel naar welke foutmelding die geeft.

Dan bij Err_Knop19_Click:, daar kijk je op err.description, dat is niet echt netjes, maar maakt geen verschil waarom hij niet werkt. Je kan beter kijken op err.number

Verwijderd

Topicstarter
ik heb dit geadaan en dat werkt goed.

Private Sub datum_AfterUpdate()

Dim dat As Date
dat = Me.datum.Value

If Forms![Form werknemer2].uren!datum = dat Then
MsgBox "Deze datum bestaat al."
ElseIf dat > Date Then
MsgBox "Vul een datum in die kleiner of gelijk is aan " & Date
End If

End Sub

  • Boss
  • Registratie: September 1999
  • Laatst online: 21:39

Boss

+1 Overgewaardeerd

Laat het gewoon vergelijken in de validatie van het veld. Heb je geen regel code voor nodig en ben je van al dat geklooi af.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.

Pagina: 1