Access programm beenden - vorher nachfragen

Hallo,
ich frage mal in die Runde: Warum fragt Access beim Klicken dieser Prozedur nicht nach, sondern schließt ohne Nachfrage. VAR_Sicherheitsabfragen ist als boolean definiert. Was habe ich vergessen?

Public Sub schließen_Click()

If VAR_Sicherheitsabfragen Then
If MsgBox_Sicherheitsabfrage(„Programm beenden?“, „Soll das Programm beendet werden?“) = 6 Then '6=Yes
DoCmd.Quit acQuitSaveAll
End If
Else
DoCmd.Quit acQuitSaveAll
End If

Me!frm_start.SetFocus
Me!frm_start!FocusDummy.SetFocus
End Sub

Moin, Roter Adler,

Public Sub schließen_Click()

Msgbox „VAR_Sicherheitsabfragen:“ & VAR_Sicherheitsabfragen

If VAR_Sicherheitsabfragen Then

Gruß Ralf

Hallo Ralf,

wenn ich deinen Code einfüge, bekomme ich die Meldung „VAR_Sicherheitsabfragen:Falsch“ und dann schließt das Programm. Muß ich irgendwo sagen „True“?

Danke für Deine Antwort
Roter Adler

Hallo Ralf,

wenn ich deinen Code einfüge, bekomme ich die Meldung
„VAR_Sicherheitsabfragen:Falsch“ und dann schließt das
Programm. Muß ich irgendwo sagen „True“?

Hi Adler,

ja, schreibe es so:
If VAR_Sicherheitsabfragen = True Then
, dann wird das klar.

Benutze mal diesen Code, der hat nicht so Spaghettiansätze wie deiner.
vbyes ist leichter lesbar als 6.

Was ist „MsgBox_Sicherheitsabfrage“, eine benutzerdefinierte Funktion oder gibt es diese Funktion bei Access?

Option Explicit
'
Public Sub schließen\_Click()
Dim strTitel As String, strFrage As String
strTitel = "Programm beenden"
strFrage = "Soll das Programm beendet werden?"
If VAR\_Sicherheitsabfragen = False Then DoCmd.Quit acQuitSaveAll
If MsgBox\_Sicherheitsabfrage(strTitel, strFrage) = vbYes Then
 DoCmd.Quit acQuitSaveAll
End If
Me!frm\_start.SetFocus
Me!frm\_start!FocusDummy.SetFocus
End Sub

Gruß
Reinhard

Hi Roter Adler,

die MsgBox sollte Dir nur zeigen, wie der Schalter VAR_Sicherheitsabfragen gesetzt ist, wenn die Sub aufgerufen wird. Natürlich musst Du ihn setzen, wer denn sonst?

Gruß Ralf

Moin, Reinhard,

Was ist „MsgBox_Sicherheitsabfrage“, eine benutzerdefinierte
Funktion oder gibt es diese Funktion bei Access?

entweder willst Du uns verladen oder Du brauchst eine neue Brille, weit und breit ist da kein Unterstrich. Du wirst doch wohl MsgBox kennen!

If VAR_Sicherheitsabfragen = False Then DoCmd.Quit
acQuitSaveAll
If MsgBox_Sicherheitsabfrage(strTitel, strFrage) = vbYes Then
DoCmd.Quit acQuitSaveAll
End If

Über Stilfragen ließe sich diskutieren - der UP hat seinen Code garantiert irgendwo abgekupfert. Ich zB bin Fortran-74-geschädigt und würde deshalb niemals schreiben

 If VAR\_Sicherheitsabfragen = False

sondern

 If Not VAR\_Sicherheitsabfragen

.

Und auf einen ELSE zu verzichten, wo einer hingehört, ist eine beliebte Fehlerquelle, wenn später mal erweitert werden soll, weil die Logik nicht mehr offensichtlich ist.

Gruß Ralf

Was ist „MsgBox_Sicherheitsabfrage“, eine benutzerdefinierte
Funktion oder gibt es diese Funktion bei Access?

entweder willst Du uns verladen oder Du brauchst eine neue
Brille, weit und breit ist da kein Unterstrich. Du wirst doch
wohl MsgBox kennen!

Hallo Ralf,

http://www.bilder-space.de/show.php?file=01.12RQ3HY2…

Bilder sagen mehr als Worte :smile:

Vielleicht liegt es am Browser, ich habe firefox 3.0.4 und da ist halt ein Unterstrich.

Gruß
Reinhard

Über Stilfragen ließe sich diskutieren - der UP hat seinen
Code garantiert irgendwo abgekupfert. Ich zB bin
Fortran-74-geschädigt und würde deshalb niemals schreiben

If VAR_Sicherheitsabfragen = False

sondern

If Not VAR_Sicherheitsabfragen

.

Und auf einen ELSE zu verzichten, wo einer hingehört, ist eine
beliebte Fehlerquelle, wenn später mal erweitert werden soll,
weil die Logik nicht mehr offensichtlich ist.

Hallo Ralf,

vorhin hatte ich keine Zeit da ich weg mußte, konnte nur kurz auf den Unterstrich eingehen.

Jetzt wird der Rest von deinen Aussagen sezesiert :smile:)

Bei mir ist es so, je nach Lust und Laune schreibe ich

If VAR_Sicherheitsabfragen then
oder
If Not VAR_Sicherheitsabfragen then
oder
If VAR_Sicherheitsabfragen =true/false then
oder
If Not VAR_Sicherheitsabfragen =true/false then

Die einzige Regel an die ich mich da strikt halte ist, sofern ich einen If-Else Fall habe, in den Uf-Zweig das reinschreiben was anzunehmenderweise am meisten auftreten wird, sofern man das erahnen kann.
Einfac aus Schnelligkeitsgründen.

Es gibt noch ein zweites bei If-Abfragen daß mir wichtig ist bei Code der viele Möglichkeiten durchprüfen muß und der dadurch sehr viel Zeit braucht, ich schreibe dann die If-Abfragen sofern möglich von der Abfragelogik her, einzeln hin.

Also nicht
If x=2 and y = 2 and z=5 then

sondern
If x=2 Then
if y=2 then
if z=5 then

Denn in Vba (VB weiß ich grad nicht) wird der komplette Ausdruck
If x=2 and y = 2 and z=5
ausgewertet, egal ob x schon ungleich 2 ist oder nicht.

Bei Codes, die 10 illionen Kombinationen durchspielen macht das schon für die Ablaufdauer den zwei-dreidachen Zeitfaktor aus.

An sich wollte ich nur sagen, kam wohl wieder mal ins Rumplaudern *gg*, was meinst du mit dem Fehler durch Weglassen des Else-Zweiges, ich hab das nicht verstanden, der war dich gar nicht notwendig?
Wenn er notwendig wird, füge ich ihn ein.

Gruß
Reinhard

[ot] Ablaufstrukturen
Moin, Reinhard,

Bei Codes, die 10 illionen Kombinationen durchspielen macht
das schon für die Ablaufdauer den zwei-dreidachen Zeitfaktor
aus.

zeitkritische Anwendungen wird kaum jemand in Access erstellen; Access-Datenbanken, in denen auf einigen 100.000 Datensätzen operiert wird (im Sinne von Massenänderungen), sind erstens selten und zweitens falsch konstruiert, wenn dabei ernsthafte Zeitprobleme auftreten. Oder das Maschiensche hat zuwenig Speicher :smile:

was meinst du mit dem Fehler durch Weglassen des Else-Zweiges,
ich hab das nicht verstanden, der war dich gar nicht notwendig?

Das aktuelle Coding habe ich nicht durchforstet, ist mir eh rätselhaft, was da passieren soll. Scheint eine nutzlose Übungsaufgabe zu sein.

Wenn Alternativen abzuarbeiten sind, sollten sie auch im Coding als Alternativen zu erkennen sein, deshalb bevorzuge ich den ausdrücklichen ELSE-Zweig, auch wenn der IF-Zweig durch einen EXIT (oder im Beispiel den QUIT) verlassen wird. Kommt eine dritte Alternative hinzu (meist Monate später), muss der Code erstmal analysiert werden: Was gehört zum Durchfall-ELSE, was nicht.

Gruß Ralf

Hallo Reinhard,
nach Deinem Vorbild habe ich es jetzt so gelöst:

Public Sub schließen_Click()
Dim strTitel As String
Dim strFrage As String

strTitel = „Programm beenden“
strFrage = „Soll das Programm beendet werden?“

If VAR_Sicherheitsabfragen = False Then
If MsgBox(strFrage, vbYesNo, strTitel) = vbYes Then
DoCmd.Quit acQuitSaveAll
Else
Me!Anträge_eingeben.SetFocus

End If
End If

End Sub

Es macht jetzt was ich wollte. Vielen Dank auch an alle anderen Antwortgeber.
Grüße
der Rote Adler :smile: