crack24
Goto Top

Access Makro Stoppen mit VBA Variable als Bedingung?

Hallo,

ich habe ein Access 2003 Formular mit dem wir neue Kundenaufträge erfassen. Das hat vor 10 Jahren mal jemand für uns programmiert.

Da wird unter anderem eine Bestellnummer vom Kunden angegeben und dann oben auf den OK-Button geklickt. Der OK-Button führt dann ein Makro aus, dass diverse Sachen prüft und dann den Datensatz speichert. Ich mag zwar keine Makros, aber so ist es nun mal programmiert.

So sieht das Formular aus
http://img6.imageshack.us/img6/2927/20130611154446.jpg

Jetzt möchte ich eine Funktion einfügen, die das Feld "Bestellnummer" überprüft, ob diese Nummer schon in der DB vorhanden ist. Das habe ich erstmal so gemacht

Sub Check_Bestellnummer()

If DCount("*", "Fertigung", "[F_Knd_Besl_Nr]='" & Me![F_Knd_Besl_Nr] & "'") > 0 Then
Msg = Ein Auftrag mit dieser Bestellnummer ist schon vorhanden?

End Sub

Private Sub F_Knd_Besl_Nr_LostFocus()
Check_Bestellnummer
End Sub

Wenn dann nach Eingabe der Nummer oben auf OK geklickt wird, kommt auch die Messagebox falls die Nummer doppelt ist. Aber danach wird das Formular trotzdem gespeichert, weil das Makro ja nach der Messagebox weiterläuft.

Kann man irgendwie das Makro durch Abfragen einer VBA Variablen stoppen? Dann könnte ich eine Variable setzen, falls der User bei der Messagebox auf "Abbrechen" drückt und diese Variable dann im OK-Button Makro als erstes abfragen. Den Befehl "stop macro" gibt es ja aber ich weiß nicht wie als Bedingung die Variable checken kann.

Wisst ihr da vielleicht was?

Gruß, Oliver

Content-Key: 207832

Url: https://administrator.de/contentid/207832

Printed on: April 24, 2024 at 22:04 o'clock

Member: takeda
takeda Jun 11, 2013 at 17:38:27 (UTC)
Goto Top
Versuch mal:


If MsgBox("Ein Auftrag mit dieser Bestellnummer ist schon vorhanden! Wollen Sie trotzdem speichern?", vbYesNo) = vbNo Then
Me.Undo
Cancel = True
End If


LG Takeda
Member: crack24
crack24 Jun 12, 2013 updated at 07:17:42 (UTC)
Goto Top
Danke, das hat mich schon mal auf die richtige Spur gebracht. Leider sind dann natürlich alle Daten aus dem Formular weg.

Ich hatte jetzt die Idee, dass der Ok-Button nicht das Makro aufruft sondern folgende Funktion

Sub Check_Bestellnummer()

If DCount("*", "Fertigung", "[F_Knd_Besl_Nr]='" & Me![F_Knd_Besl_Nr] & "'") > 0 Then

If MsgBox("Ein Auftrag mit dieser Bestellnummer ist schon vorhanden! Wollen Sie trotzdem speichern?", vbYesNo) = vbYes Then
DoCmd.RunMacro "Formular Erfassung.OK", 1
Else
Cancel = True
End If

End If
End Sub

Wenn man dann in der Message-Box auf "ja" klickt, wird das ursprüngliche Makro aufgerufen. Das macht er auch und legt den Datensatz an, aber stürzt dann seltsamerweise ab und zeigt nur noch die Sanduhr.
Wenn ich das Makro direkt über den Ok-Button aufrufe, funktioniert alles.

Woran kann das denn liegen?

Viele Grüße
Oliver