Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Pflichtfeld

Begonnen von Icemann1970, Mai 06, 2017, 17:08:44

⏪ vorheriges - nächstes ⏩

Icemann1970

Hallo zusammen.
Ich habe in einem HFo zwei Ufo, in dem einem UFo (Endlosformular) werden die Daten über das ander UFo eingetrage (( um immer die Eingabe oben und nicht am ende des Endlosformular zu erzeugen)). Auswahl Kombifeld1, Kombifeld2 und Textfeld werden über Column ausgewählt/ausgefüllt. Wenn Kombifeld1 oder Kombifeld2 ausgewählt wird habe ich im ((Code: Me.Anzahl.SetFocus )) um zum letzten Textfeld zu springen welches als Pflichtfeld funktionieren soll  <---- Alles okay, Cursor blinkt in dem Feld.
Jetzt mein Problem:
Wenn ich die Eingabetaste oder Pfeile betätige fängt ein neuer Datensatz an oder mit der Maus auf irgendwas anderes klicke (klar) ist der gesetzte SetFocus futsch.
Wie bekomme ich das hin das Feld "Anzahl" zur Eingabe zu zwingen und nicht wieder einen neuen Datensatz aufruft ?
Mfg. Udo

bahasu

Hi,
im Formular gibt es das Ereignis "Vor Aktualisierung".
Dort kannst Du abfragen, ob es einen Eintrag in Deinem gewünschten Feld gibt.
Falls das nicht der Fall ist, setze Cancel = true, damit Du eine Angabe machen musst.

Ich hoffe, ich hatte Dein Anliegen korrekt verstanden.

Harald
Servus

MzKlMu

Hallo,
vermeide unbedingt ein Feldname "Anzahl", Anzahl ist eireserviertes Wort.
In einem Feld mit Z.B.
=Anzahl*EPreis mit nicht der Inhalt Anzahl verwendet, sondern die Anzahl der Datensätze. Auch wenn man [Anzahl] verwendet führt das zum gleichen Fehler.

Zudem stellt sich die Frage wozu hier Column notwendig ist. Ein Kombifeld sollte an das Schlüsselfeld gebunden werden, dann braucht es auch kein Column.
Gruß Klaus

Icemann1970

Okay, Anzahl werde ich gleich nochmal umbenennen.
Warum die Column? Artikelnummer und Artikelbezeichnung kann man über die Kombifelder auswählen, wenn eine Auswahl getroffen ist füllt sich das andere Kombifeld mit dem dazugehörigem Wert (ArttikelNummer oder Bezeichnung)
Problem ist dabei das die Auswertung nach Auswahl mit dem Befehl Me.Refresh erfolgen muss, da ich noch nicht in dem Feld ((((Anzahl)))) eintragen konnte meckert er schon nach der MsgBox.

Private Sub Form_BeforeUpdate(Cancel As Integer)

    If IsNull(Anzahl) Then
           
    MsgBox " Bitte die Anzahl eingeben "
       
    End If

End Sub
----------------------------------------------------------------------------
Private Sub Kombinationsfeld41_AfterUpdate()

Artikel = Me!Kombinationsfeld41.Column(2)
    Hersteller = Me!Kombinationsfeld41.Column(3)
    Me.Refresh
   
   
    Me.Anzahl.SetFocus

End Sub
----------------------------------------------------------------------
Private Sub Kombinationsfeld42_AfterUpdate()

Bezeichnung = Me!Kombinationsfeld42.Column(0)
    Hersteller = Me!Kombinationsfeld42.Column(3)
    Me.Refresh
   
    Me.Anzahl.SetFocus

End Sub
Mfg. Udo

MzKlMu

#4
Hallo,
ZitatWarum die Column? Artikelnummer und Artikelbezeichnung kann man über die Kombifelder auswählen, wenn eine Auswahl getroffen ist füllt sich das andere Kombifeld mit dem dazugehörigem Wert (ArttikelNummer oder Bezeichnung)
Was ein Kombifeld anzeigt lässt sich viel einfacher über die Spaltenbreiten steuern, da braucht es kein Column, da braucht es keinen Code, keinen Buchstaben.

Das Feld "Anzahl" (bzw. der neue Name) kannst Du in der Tabelle zum Pflichtfeld machen über eine Gültigkeitsregel (Ist Nicht Null) und auch eine Meldung ausgeben.
"Das Feld Anzahl darf nicht leer sein".

Dann hast Du ohne einen Buchstaben zu programmieren alles was Du brauchst.

Der Code zum Prüfen ist auch unvollständig, da der Parameter Cancel nicht genutzt wird.
Private Sub Form_BeforeUpdate(Cancel As Integer)
    If IsNull(Anzahl) Then
        MsgBox " Bitte die Anzahl eingeben "
        Cancel = True
    End If
End Sub

Die Datenherkünfte der Kombis dürften auch falsch sein. Die 1. Spalte (0) sollte  auf den Fremdschlüssel verweisen und das kann nicht (bzw. sollte nicht) die Bezeichnung sein.
Und beide Kombis müssen die gleiche Datenherkunft und Einstellungen haben bis auf die Spaltenbreiten.

Du solltest also erst mal den Durcheinander beseitigen.
Aber wie gesagt wahrscheinlich ist gar kein Code erforderlich.

Zitatum immer die Eingabe oben und nicht am ende des Endlosformular zu erzeugen)).
Das lässt sich mit ungebunden Feldern im Formularkopf eines Endlosforms viel einfacher realisieren. Mit einem echten Button zum Speichern wo man dann auch alle Pflichtfelder prüft. Da wird dann aber VBA benötigt.
Dazu findest Du im Anhang ein Beispiel.

PS:
Bitte für Code die Codetags des Forums benutzen.
Gruß Klaus

Icemann1970

Hallo Klaus.
Das mit der Gültigkeitsregel habe ich auch schon gemacht aber wenn ich aus dem UFo gehe (in einem anderen UFo in dem HFo oder das HFo) kommt die Gültigkeitsregel nicht zum greifen weil ich die Eingabe nicht bis zum ende durchgeführt habe (Quasi wartet die Gültigkeitsregel auf einen Wert den ich noch nicht eingegeben habe). Wenn ich in dem besagten UFo bleibe und auf ein anderes "Feld/Befehlsfläche" gehe dann schon. Ich müsste also einen Befehl haben die Eingabe bis zum ende durchzuführen, bevor ich ein anderes UFo  gehe oder das HFo "Anklicke"
Mfg. Udo

MzKlMu

Hallo,
bitte noch mal lesen, ich habe noch einiges ergänzt.
Und was ist mit den anderen Hinweisen ?
Hast Du das probiert mit dem Cancel ?
Gruß Klaus

Icemann1970

Hallo Harald und Klaus.
Ja..... ich habe vergessen    Cancel = true   zu schreiben.
Jetzt Funktioniert es. Vielen Dank !!!
Danke auch für die DB im Anhang.
Ich Habe es etwas anders gemacht. Beide Kombifelder haben den gleichen Herkunftsort. In dem ersten kann ich die Artikelnummer aussuchen (beim einschreiben) bei dem anderen halt die Bezeichnung. Das Feld welches zuerst ausgewählt wird ergänzt automatisch das andere Feld, welches ich mit Refresh versucht hatte. Habe es jetzt mit SetFocus von den einzelnen Kombis auf den jeweils nächsten geschubst und es wird zugehörig aktualisiert.
Beispiel folgt.
Mfg. Udo