Hallo
Folgende Konstellation:
Wenn ich in einem Auftragserfassungs-Formular einen neuen Auftrag erfasse, springt der Fokus auf das Feld Kunden-Nr (cboAuftrK_kun_IDF)
Dieses Feld kann nur verlassen werden, wenn man eine Kunden-Nr eingibt.
Hier der entsprechende Code
Private Sub cboAuftrK_kun_IDF_LostFocus()
'Ueberprüfung ob eine Kunden-Nr vorhanden ist.
Dim strText As String
strText = "Es ist keine Kunden-Nr vorhanden"
If IsNull(Me.cboAuftrK_kun_IDF) Then
If Kundenstamm = False Then
MsgBox (strText)
Me.cboAuftrK_kun_IDF.SetFocus
Exit Sub
End If
End If
End Sub
Habe ich einen Auftrag eröffnet ohne, dass der entsprechende Kunde existiert, gibt es einen Button, der mir den Kundenstamm öffnet. Hier kann ich einen Kunden eröffnen und die entsprechende Kunden-Nr in das Feld Kunden-Nr im entsprechenden Aufrag schreiben.
Meine Frage / Problem: Mit meinem Script kann ich diesen code der mir den Kundenstamm öffnet nicht mehr ausführen. Wie kann ich nun meinen Code umbauen, dass ich den kundenstamm öffnen kann, jedoch alle anderen Manipulationen gesperrt bleiben, bis ich eine Kunden-Nr erfasst habe.
Gruss Daniel
Hallo
Ich habe ausversehen einen Code in das Forum gestellt, den ich zum Testen und Ausprobieren geschrieben habe. Hier ist der richtige Code:
Private Sub cboAuftrK_kun_IDF_LostFocus()
'Ueberprüfung ob eine Kunden-Nr vorhanden ist.
Dim strText As String
strText = "Es ist keine Kunden-Nr vorhanden"
If IsNull(Me.cboAuftrK_kun_IDF) Then
MsgBox (strText)
Me.cboAuftrK_kun_IDF.SetFocus
Exit Sub
End If
End Sub
Gruss Daniel
Hallo Daniel,
Verlagere den Code ins Ereignis BeforeUpdate des Feldes.
Private Sub cboAuftrK_kun_IDF_BeforeUpdate(Cancel As Integer)
'Ueberprüfung ob eine Kunden-Nr vorhanden ist.
Dim strText As String
strText = "Es ist keine Kunden-Nr vorhanden"
If IsNull(Me!cboAuftrK_kun_IDF) Then
If Kundenstamm = False Then
MsgBox (strText)
Cancel = True
Me!DeinButton.SetFocus
End If
End If
End Sub
Ein andere Vorgehensweise wäre (ich mach das so),
die Anlage eines Auftrages vom Kundenformular aus
anzustossen.
Es doch so, dass bevor Du einen Auftrag bekommst,
musst Du immer erstmal einen Kunden haben.
IMO gilt das sogar bei Neukunden - ohne Kunde kein Auftrag.
hth
gruss ekkehard
Hallo
Ja für einen Auftrag braucht man immer einen Kunden. Wenn ich es nicht weiss, ob der Kunde schon vorhanden ist, muss ich immer zuerst im Kundenstamm nachschauen. Diesen Vorgang möchte ich ersparen. So kann man im Auftrag nach dem Kunden suchen. Ist diesr nicht vorhanden, kann man aus dem Auftrag den Kundenstamm öffnen, einen Kunden erfassen un die Kunden-Nr direkt in den offenen Auftrag schreiben. So habe ich es programmiert.
Mit meinem Script den ich hier abgebildet habe, möchte ich nun verhindern, dass man am Auftrag Daten erfasst, ohne das ein Kunde im Auftrag erfasst ist, resp. ich möchte verhindern, dass man eine Systemfehlermeldung bekommt wenn der Kunde fehlt. Nun möchte ich diese zwei Bedingungen irgendwie zusammenfügen. Mit deinem Code kann ich aber weiterhin an meinem Auftrag Daten erfassen, den Auftrag schliessen usw. Diese Mainipulationen rufen aber die ungewünschte Systemfehlermeldung hervor, dass er keinen Wert im Feld soundso findet.
Meine Frage wie kann ich nun diese zwei Bedingungen verknüpfen.
Gruss Daniel
Hallo
Dann lege doch in dein Auftragsformular eine Kombifeld mit auswahl deiner angelegten Kunden an, ist der Kunde noch nicht angelegt wird er ergänzt. Erst nach Auswahl und erfolgter Eingabe eines gültigen Kunden darf es möglich sein Positionen dem Auftrag hinzu zufügen
Hallo Daniel,
Dann rufe doch direkt die Ereignisprozedur des Buttons auf.
Private Sub cboAuftrK_kun_IDF_LostFocus()
'Ueberprüfung ob eine Kunden-Nr vorhanden ist.
Dim strText As String
strText = "Es ist keine Kunden-Nr vorhanden"
If IsNull(Me.cboAuftrK_kun_IDF) Then
MsgBox (strText)
Call Me!DeinButton_Click()
End If
End Sub
gruss ekkehard
N'abend,
was hast Du vorgesehen, wenn Deine Datenbank-Benutzer gar nicht in das Feld gehen, also auch kein LostFocus-Ereignis eintreten kann?
z.B nutzt Du das Formular-Ereignis "Vor Aktualisierung"?
Harald
Hallo Harald,
ZitatWenn ich in einem Auftragserfassungs-Formular einen neuen Auftrag erfasse, springt der Fokus auf das Feld Kunden-Nr (cboAuftrK_kun_IDF)
Sollte Deine Frage beantworten.
gruss ekkehard
Hallo Ekkehard
Deine Lösung funktioniert bei mir nicht. Wenn ich einen neuen Auftrag eröffnen und das Feld cboAuftrK_kun_IDF verlasse bringt er Fehler beim Kompilieren Syntaxfehler
Hier der Code
Private Sub cboAuftrK_kun_IDF_LostFocus()
'Ueberprüfung ob eine Kunden-Nr vorhanden ist.
Dim strText As String
strText = "Es ist keine Kunden-Nr vorhanden"
If IsNull(Me.cboAuftrK_kun_IDF) Then
MsgBox (strText)
Call Me!cmdKunde_Click()
End If
End Sub
Gruss Daniel
Hallo!
Mit Me!xxx rufst du im Prinzip Me.Controls("xxx") auf. Da cmdKunde_Click aber eine Prozedur ist, ist die in der Controls-Auflistung nicht enthalten. ;-)
Call cmdKunde_Click()
Falls cmdKunde_Click public deklariert ist, würde auch noch
Call Me.cmdKunde_Click()
funktionieren.
Noch etwas bezüglich Benennenung: cmdKunde_Click beschreibt eigentlich nicht, was passiert - denn geklickt wird bestimmt nicht.
Ich würde den Code nach folgenden Prinzip umgestalten:
private sub cmdKunde_Click()
Call NeuenKundenErstellen() ' Anm.: nur als Beispiel - ich weiß nicht, was ablaufen soll.
End sub
private sub NeuenKundenErstellen()
...
End sub
Private Sub cboAuftrK_kun_IDF_LostFocus()
CheckKundenNummer
End Sub
private sub CheckKundenNummer()
If IsNull(Me.cboAuftrK_kun_IDF) Then
MsgBox "Es ist keine Kunden-Nr vorhanden"
Call NeuenKundenErstellen()
End If
' und weiter?
End Sub
mfg
Josef
Hallo Daniel,
Sorry, habe ich zu kurz drüber nachgedacht, und
das, sogar wider besseres Wissen, so runtergeschrieben.
Wie's richtig ist, hat Josef Dir geschrieben (Danke).
Und wie es noch besser geht, siehst Du auch in
seinem Post.
gruss ekkehard
Hallo
In unserer Diskussion haben wir uns sehr von meinem ursprünglichen Ziel entfernt. Mein Ziel war, dass man in einem Auftrag in dem die Kunden Nr noch nicht erfasst ist, nur zwei Aktionen ausführen kann. Den Kundenstamm oder eine Kundenvollindexsuchmaske mit einem Button aufrufen.
Ich habe es nun auf eine andere Weise gelöst. Ich habe eine Funktion geschrieben, die mir zwingende Felder kontrolliert, Kunden-Nr, MWST-Code usw.
In allen relevanten Sub habe ich nun diese Funktion als Bedingung eingebaut. Wenn sie nicht erfüllt ist, kommt eine Meldung die sagt ob die Kunden-Nr oder die MWSt oder usw. fehlt.
Gruss Daniel