Hallo,
habe meine Kenntnisse entweder von hier oder durch ausprobieren.
Habe ein HF "40Auf03" und ein UF "ST Rest Gesamt" (Abfrage "41AufPStG03 " als Formular).
Im HF habe ich ein Feld "StRest", dass die noch zu liefernde Menge angeben soll.
Mein Problem:
Wie kann ich dem Feld StRest "sagen", dass er das Ergebnis der Abfrage übernehmen soll oder aufhören kann.
Mein Versuch:
If IsNullForms![40Auf03]![ST Rest Gesamt]![41AufPID] Then
Me.[41StRest] = Me.[41StAuf]
Else
Me.[41StRest] = Forms![40Auf03]![ST Rest Gesamt]![RestStAufP]
End If
Funktioniert leider nicht.
Wenn noch nichts geliefert wurde, kommt immer der Fehler "Sie haben einen Ausdruck ohne Wert eingegeben".
Vielen Dank im voraus.
Yoschi
Hallo,
mal bloß so in den Wind gereimt...
Wenn der dargestellte Code eine Kopie aus deinem Formular ist, dann fällt in erster Linie mal auf, dass da ein Klammernpaar fehlt! :-\
If IsNull(Forms![40Auf03]![ST Rest Gesamt]![41AufPID]) Then
IsNull liefert als Wahrheitswert das Ergebnis der Frage auf NULL für das Feld / Variable / ... innerhalb der Klammer.
Als nächstes ist zu klären WANN oder WODURCH die Bedingung initiiert wird, welches Ereignis führt zur Abarbeitung deines Codes.
Und - auf welchem Formular steht das Ding?
Davon ixt nämlich auch die erste Zeile in deiner Bedingung abhängig!
Wenn sich der Code am Hauptformular befindet ist die Syntax deiner IsNull - Frage falsch!
In dem Fall trifft die Syntax zu: Me!Subform1.Form!ControlName
Daher müsster die Frage so gestellt werden:
If IsNull(Me![ST Rest Gesamt].Form![41AufPID]) Then
Im Else-Zweig deiner Bedingung möchtest du ebenfalls einen Wert aus einem Feld im Unterformular beziehen.
Wobei es auch hier drauf an kommt, wie bereits erwähnt, WO dein Code steht.
Vielleicht möchtest du mal die verschiedenen Möglichkeiten näher durchschauen... dann solltest du hier mal ein Blick drauf werfen: ;)
www.donkarl.com?FAQ4.2 (http://www.donkarl.com?FAQ4.2) und in der Folge dann auch auf jeden Fall auf die Seite von Dev Ashish,
auf die donkarl verlinkt: http://www.mvps.org/access/forms/frm0031.htm (http://www.mvps.org/access/forms/frm0031.htm)
Grüße
Peter
Hallo,
DANKE für die schnelle Hilfe.
Der Code steht im HFo im Steuerelement 41StAuf "beim Verlassen"
Wenn schon etwas geliefert wurde funktioniert es.
Wenn noch nichts geliefert wurde und die Auftragsmenge ändert sich, kommt die Meldung
"Laufzeitfehler 2113, Sie haben einen Wert eingegeben, der für diese Feld nicht gültig ist."
Beim Debuggen ist die Zeile
Me.[41StRest] = Me![ST Rest Gesamt].Form![RestStAufP]
nach der ELSE-Anweisung markiert.
Gruß
Yoschi
Hallo,
was steht denn in dem Fall im Feld Me![ST Rest Gesamt].Form![RestStAufP] ?
Ich würde sagen da sollte der gesamte Rest drin stehen oder?
schreibe dennoch mal
Me.[41StRest] = NZ(Me![ST Rest Gesamt].Form![RestStAufP],0)
um ins Feld 41StRest keinen NULL-Wert zu übergeben wenn RestStAufP nichts enthält.
HTH
Peter
Hallo,
habe gestern eine falsche Antwort gegeben; war schon zu spät und ich hatte Hunger. Tut mir leid.
Das Steuerelement [41StRest] hat beim Auftrag anlegen den Wert vom Steuerelement [41StAuf] übernommen.
Beim Öffnen des Formulars [40Auf03] ist die Abfrage [ST Rest Gesamt] noch leer (wenn noch nichts geliefert wurde), wenn jetzt geliefert werden soll, wird das Formular Lieferschein [60Lf01] geöffnet.
Wenn ich das Formular [60Lf01] schließe, wird das HF [40Auf03] aktualisiert, d. h. im UF [ST Rest Gesamt] wird angezeigt, wie viel geliefert wurde, wie hoch die Auftragsmenge ist und wie viel noch zu liefern ist.
Jetzt soll auch die Restmenge in [41StRest] aktualisiert werden.
Das gleiche soll auch passieren, wenn ich die Auftragsmenge aktualisiere, egal ob schon etwas geliefert wurde.
Leider passiert noch nicht das was ich mir vorgestellt habe. Wenn schon etwas geliefert wurde ist alles in Ordnung,
wenn noch nicht geliefert wurde erscheint die Fehlermeldung Laufzeitfehler -2147352567 (80020009): Sie haben einen Ausdruck ohne Wert eingegeben.
Der angepasste Code lautet:
If IsNull(Me![ST Rest Gesamt].Form![41AufPID]) Then
Me.[41StRest] = Me.[41StAuf]
Else
Me.[41StRest] = Nz(Me![ST Rest Gesamt].Form![RestStAufP], 0)
End If
Hintergrund ist der, dass ich für eine neue Abfrage (offene Aufträge mit Stückzahl) das Feld mit der aktuellen Stückzahl benötige.
Gruß
Yoschi
Hallo,
Zitatund ich hatte Hunger
... das entschuldigt die schlimmsten Fehler! :D :D :D
also ich glaube ich habe da ein kleines aber wichtiges Verständnisproblem. Also lass mich der Sache nochmals langsam nähern :-\
Du schreibst:
ZitatDer Code steht im HFo im Steuerelement [41StAuf] "beim Verlassen"
Gehe ich recht in der Annahme, dass in diesem Feld die Gesamt-Auftragsmenge erfasst wird?
Im Code steht:
If IsNull(Me![ST Rest Gesamt].Form![41AufPID]) Then
Steht im Unterformular im Feld [41AufPID] die bislang gelieferte Menge?
Das würde dann bedeuten, dass wenn bisher nichts geliefert wurde ...
Me.[41StRest] = Me.[41StAuf]
...das Feld [41StRest] die noch zu liefernde Menge anzeigen/erhalten soll, in dem Fall also die gesamte Auftragsmenge - liege ich da auch richtig?
Im ELSE-Zweig also bei bereits vorhandener Liefermenge ...
Else
Me.[41StRest] = Nz(Me![ST Rest Gesamt].Form![RestStAufP], 0)
End If
...soll dann nach meinem Verständnis das Feld [41StRest] die in der Abfrage oder im Unterformular errechnete Restmenge (Auftragsmenge - Liefermenge) zugewiesen bekommen.
Stimmt meine Annahme bis hier her auch noch?
Wenn nun ein Fehler entsteht beim Abarbeiten deines Codes dann müsste er doch m.E. hier entstehen:
If IsNull(Me![ST Rest Gesamt].Form![41AufPID]) Then
Me.[41StRest] = Me.[41StAuf]
Da dieser Teil ja ausgeführt wird und zuständig ist, wenn NICHTS geliefert wurde oder?
Kannst du das mal kommentieren bitte
Hallo,
zu 1.(Gehe ich recht in der Annahme, dass in diesem Feld die Gesamt-Auftragsmenge erfasst wird?)
Ja, im Feld [41StAuf] wird die Gesamt-Auftragsmenge erfasst.
zu 2. (Steht im Unterformular im Feld [41AufPID] die bislang gelieferte Menge?)
Nein, das Feld [41AufPID] ist der AutoWert der Auftragsposition. Die noch zu liefernde Menge steht in [Rest ST AufP].
zu 3. (das Feld [41StRest] die noch zu liefernde Menge anzeigen/erhalten soll, in dem Fall also die gesamte Auftragsmenge -
liege ich da auch richtig?)
Richtig.
zu 4. (soll dann nach meinem Verständnis das Feld [41StRest] die in der Abfrage oder im Unterformular errechnete Restmenge
(Auftragsmenge - Liefermenge) zugewiesen bekommen.)
Ja!
zu 5. (Wenn nun ein Fehler entsteht beim Abarbeiten deines Codes dann müsste er doch m.E. hier entstehen:)
Ja, eigentlich schon, aber die Fehlermeldung sagt immer, dass die ELSE-Anweisung "schuld" ist.
Vielleicht muss die Bedingung auch anders gestellt werden. Leider wüsste ich dann nicht wie.
Ich hatte gedacht, dass wenn die (das) Abfrage(Formular) nicht gefüllt ist, dass es so funktioniert.
Gruß
Yoschi
Hallo,
das Problem ist gelöst!
DANKE DATABASE, für deine Hilfe (SYNTAX) und Hinweise; sonst würde ich jetzt immer noch rätseln.
Fehler: Das Unterformular war zwar optisch leer, aber beim CODE auslesen gefüllt.
Lösung:
Ich habe das Feld [41AufPID] in meiner Abfrage durch das Feld [61AufP] vom Lieferschein ersetzt. Das Feld [61AufP] enthält die Auftragsposition-ID. Jetzt ist auch das Unterformular [ST Rest Gesamt] (wenn noch nichts geliefert wurde) nicht mehr gefüllt und der Fehler tritt nicht mehr auf.
Anscheinend darf man bei so einer Aktion nie den Autowert des HF einsetzten.
Gruß
Yoschi
Hallo Yoschi,
na, dann ist ja alles bestens!
Antworte erst jetzt da ich in letzter Zeit einfach zu viel um die Ohren habe ... von wegen Sommerloch - phaaa!
Grüße
Peter