Neuigkeiten:

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

Mobiles Hauptmenü

Laufzeitfehler 2424: Der von Ihnen eingegebene Ausdruck...nicht gefunden

Begonnen von Rene_01, Dezember 01, 2016, 10:32:52

⏪ vorheriges - nächstes ⏩

Rene_01

Hallo,

ich habe einen Bericht erstellt in dem beim öffnen
bestimmte Felder aus- bzw. eingeblendet werden sollen.
Der auslöser für das Aus- bzw. einblenden ist wenn in einem
Kombinationsfeld der Wert 0 steht. Beim anlegen des Datensatzes
wird in diesem Feld 0 als Standartwert gesetzt.

Mein Code zum ausblenden lautet:

If Me.comBals_05 = 0 Then

        Me.comBals_05.Visible = False
        Me.com_BMit_05.Visible = False
        Me.Bezeichnungsfeld93.Visible = False
        Me.Bezeichnungsfeld92.Visible = False

End If


Die Code ausführung hält bei der If Anweisung an und bringt
die Fehlermeldung:

Laufzeitfehler 2424: Der von Ihnen eingegebene Ausdruck enthält einen
Feld-, Steuerelement- oder Eigenschaftennamen,
der von Microsoft Access nicht gefunden werden kann.

Allerdings nur, wenn ich den Bericht schließe und erneut öffne.
Wenn ich aus der Entwurfsansicht in den Bericht gehe, dann lautet
die Fehlermeldung:

Laufzeitfehler 2427: Sie haben einen Ausdruck ohne Wert eingegeben.

Also muss der Fehler in der If Anweisung liegen!?

edgar.basler

Ich habe das Gefühl, daß dies ein anderer Grund ist. Vielleicht verstehe ich das aber auch alles "nur" falsch.

Ein Kombinationsfeld in einem Bericht? Geht das überhaupt und wenn ja, mit welchem Hintergrund?
Wenn allerdings es eine Abfrage auf ein Kombinationsfeld in einem Formular sein soll, dann muß auch der entsprechende Bezug hergestellt werden.

z.B.: if me.Form.Kombinationsfeld = ..... then

Rene_01

>>Ich habe das Gefühl, daß dies ein anderer Grund ist. Vielleicht verstehe ich das aber auch alles "nur" falsch.
Ein Kombinationsfeld in einem Bericht? Geht das überhaupt und wenn ja, mit welchem Hintergrund?<<

Ich habe in meinem Eingabeformular mehrere Kombinationsfelder. Die Eingabewerte der Kombinationsfelder
holt sich das Kombinationsfeld aus einer extra Tabelle für Kombinationsfelder. Das hat den Vorteil das Kombinationsfelder problemlos
erweitert werden können und die Werte spezifisch nach Formular und Feld angezeigt werden.
Gespeichert werden nur die IDs.

In Berichten mache ich es genauso, ich erstelle ein Kombinationsfeld Feldinhalt ist die gespeicherte ID,
in "Datensatzherkunft" ist die extra Tabelle für Kombinationsfelder. Wenn ich im Kombinationsfeld die Größe der ersten Spalte auf Null
setze wird mir im Bericht der "Klarname" angezeigt. In Berichten kann man die Werte der Kombinationsfelder nicht ändern
und sie werden wie ein normales Textfeld angezeigt.



>>Wenn allerdings es eine Abfrage auf ein Kombinationsfeld in einem Formular sein soll, dann muß auch der entsprechende Bezug hergestellt werden.
z.B.: if me.Form.Kombinationsfeld = ..... then<<

Nein der Bericht basiert vollständig auf einer Abfrage und hat keine Beziehung zu einem Formular.

Der Fehler tritt ja auch auf wenn ich statt des Kombinationsfeldes, ein ganz normales Textfeld nehme.

Im Textfeld wird 0 (der Wert) angezeigt.

MzKlMu

Hallo,
ein Kombi in einem Bericht ist völlig fehl am Platz.
Du hast ja eine Abfrage. Nimm in diese Abfrage noch die Tabelle des Kombis mit der Verknüpfung hinzu, dann hast Du völlig problemlos alle Felder aus beiden Tabellen zur Verfügung.
Gruß Klaus

crystal

Hallo,
könnte es vielleicht auch daran liegen, dass du das Feld unsichtbar machst, ohne es je wieder sichtbar zu machen?
Probier doch mal


If Me.comBals_05 = 0 Then
        Me.comBals_05.Visible = False
        Me.com_BMit_05.Visible = False
        Me.Bezeichnungsfeld93.Visible = False
        Me.Bezeichnungsfeld92.Visible = False
Else
        Me.comBals_05.Visible = True
        Me.com_BMit_05.Visible = True
        Me.Bezeichnungsfeld93.Visible = True
        Me.Bezeichnungsfeld92.Visible = True
End If


M.E. bleiben die Felder sonst unsichtbar - auch über mehrere DS hinweg. Und ich bin mir nicht ganz sicher, ob Access Werte aus unsichtbaren Feldern zurückliefert.

lg
crystal

PS: der Code müsste dann natürlich beim Datensatz-Wechsel ausgeführt werden (Current?) oder etwas geändert werden:


Me.comBals_05.Visible = True
If Me.comBals_05 = 0 Then
        Me.comBals_05.Visible = False
        Me.com_BMit_05.Visible = False
        Me.Bezeichnungsfeld93.Visible = False
        Me.Bezeichnungsfeld92.Visible = False
Else
        Me.comBals_05.Visible = True
        Me.com_BMit_05.Visible = True
        Me.Bezeichnungsfeld93.Visible = True
        Me.Bezeichnungsfeld92.Visible = True
End If


PPS: deinen Trick mit dem Kombifeld (Breite der ersten Spalte auf 0 setzen) finde ich persönlich eigentlich ganz pfiffig. Allerdings habe ich inzwischen gelernt, dass es sinnvoller ist (oder sein kann), eine "Dekodierung" der Werte ausserhalb, also im Select zu machen, wie Klaus es vorschlägt. Dann hättest du alle benötigten Klartexte gleich zur Verfügung. Allerdings macht dein Trick m.E. Sinn, wenn du anhand des gespeicherten numerischen Wertes innerhalb des Formulars bzw. Berichts noch etwas steuern möchtest (sonst müsstest du beide Werte, numerischen Wert und Klartext selektieren, was die Sache dann auch nicht unbedingt übersichtlicher macht).
Bei einer überschaubaen Anzahl von DS, die du für deinen Bericht selektierst, ist dein Trick m.E. durchaus vertretbar, zumal die reine Druckzeit eh länger sein wird als das bischen Logik im Bericht.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Rene_01

@MzKIMu

Natürlich hätte ich das in einer Abfrage machen können. Aber da hätte ich die im Kombinationsfeld angezeigten Daten in die Abfrage übernehmen müssen. Da im Kombinationsfeld 5 Spalten angezeigt werden, die dann per Column in anderen Feldern angezeigt werden. Und das 6 mal währe mir das in einer Abfrage zu unübersichtlich.

@crysal

Mein Fehler, natürlich gehört zu meinen Code auch das wieder einblenden der Felder (wie von Dir geschrieben) ich hatte sie bloß weggelassen da ja schon der erste Teil nicht funktioniert und der zweite Teil den Test nur verkompliziert hätte.

MzKlMu

Hallo,
wo ist da was unübersichtlich, übersichtlicher als eine Abfrage kann es gar nicht sein. Und alle Felder sind automatisch da. Und eine Abfrage hast Du ja ohnehin. Da ist die Geschichte mit dem Column wesentlich unübersichtlicher und vor allen Dingen auch unflexibler. Stelle Dir mal vor, Du musst wegen einer anderen Sortierung die Feldreihenfolge ändern, nichts passt dann mehr.

Und so geht es auch (ohne IF und ohne den Else Zweig):
        Me.comBals_05.Visible = Not Me.comBals_05 = 0
        Me.com_BMit_05.Visible = Not Me.comBals_05 = 0
        Me.Bezeichnungsfeld93.Visible = Not Me.comBals_05 = 0
        Me.Bezeichnungsfeld92.Visible = Not Me.comBals_05 = 0


ZitatAllerdings macht dein Trick m.E. Sinn, wenn du anhand des gespeicherten numerischen Wertes innerhalb des Formulars bzw. Berichts noch etwas steuern möchtest (sonst müsstest du beide Werte, numerischen Wert und Klartext selektieren, was die Sache dann auch nicht unbedingt übersichtlicher macht).
In einer Abfrage mit beiden TAbellen wäre der nummerische Wert ein Schlüsselfeld und müsste ohnenhin vorhanden sein.

Meiner Meinung nach, macht in Berichten die Verwendung einen Kombis keinen Sinn.
Gruß Klaus

Lachtaube

Vielleicht zeigst Du uns den Code auch einmal im Zusammenhang mit dem verwendeten Ereignis und teilst mit, in welchem Bereich sich die Steuerelemente befinden.

PS: Wenn die Bezeichnungsfelder Kinder (Children in der Controls-Auslistung des Steuerelements) sind, genügt ein Ein- oder Ausblenden des Controls - die Kinder werden analog des Steuerelements angezeigt.
Grüße von der (⌒▽⌒)

Rene_01

@MzKIMu

Also eine Abfrage mit 36 Feldern finde ich schon unübersichtlich.

Den Code ohne if und Else kannte ich noch nicht, werde ich morgen ausprobieren. Bin nicht mehr (zum Glück)auf Arbeit.

Da der Bericht fest vorgegeben ist und sich außer in den Daten nicht ändert, sehe ich in den Column Feldern kein Problem. Ist aber meine persönliche Meinung.

@Lachtaube

>>Vielleicht zeigst Du uns den Code auch einmal im Zusammenhang mit dem verwendeten Ereignis <<

Ich weiß jetzt nicht genau was Du meinst.

Die Bezeichnungsfelder sind unabhängig, sie gehören zu keinem Steuerelement

Rene_01

Bevor wir uns lange über den Sinn und Unsinn von Kominationsfeldern in Berichten unterhalten, obwohl die Einwände berechtigt sind, aber bei mir noch Fragen aufwerfen. Es funktioniert ja auch nicht wenn ich ein "normales" Textfeld benutze

  If Me.txtbals = 0 then
...
...
End If

Im Textfeld steht 0 also sollte es eigentlich funktionieren. Aber das öffnen des Berichtes bringt die gleiche Fehlermeldung.  Ich habe auch schon eine neue DB erstellt und alles in die neue DB exportiert, keine Änderung.



Beaker s.a.

Hallo Rene,
Zitatbringt die gleiche Fehlermeldung
Unabhängig davon, dass es da am Anfang mal zwei verschiedene gab, und dass ein
Anwender diese Meldung möglichst nicht zu sehen bekommen sollte, veranlasst mich
als Entwickler diese Meldung dazu auf den Button "Debuggen" zu klicken, und mir die
Zeile anzuschauen, die mir dann normalerweise gelb unterlegt angezeigt wird.
Hast du das auch mal versucht?
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lachtaube

Nun, der Code wird ja nicht frei im Berichtsmodul schweben, sondern einem (vermutlich falschen) Ereignis zugeordnet sein. Hier mal ein Beispiel, das jede zweite Zeile ein Steuerelement ausblendet.
Grüße von der (⌒▽⌒)

MzKlMu

Hallo,
mit Beim Öffnen funktioniert das nicht. Beim Formatieren wäre richtig.
Daher sollte man immer vollständigen Code zeigen, damit man das auch sieht.
Gruß Klaus

Rene_01

@ Beaker s.a.

>>Unabhängig davon, dass es da am Anfang mal zwei verschiedene gab, <<

Sorry, es sind immer noch zwei, 2424 beim öffnen des Berichts
2427 beim wechsel von der Entwurfsansicht in die Berichtsansicht

>>und dass ein Anwender diese Meldung möglichst nicht
zu sehen bekommen sollte, veranlasst mich als Entwickler diese Meldung dazu auf den Button "Debuggen" zu klicken, und mir die Zeile anzuschauen, die mir dann normalerweise gelb unterlegt angezeigt wird. Hast du das auch mal versucht?<<

Ähh, ja. Deshalb verweise ich ja verzweifelt immer auf die Zeile:

If Me.comBals_05 = 0 Then...

@ Lachtaube + MzKIMu

Das mit dem Hinweis auf das falsche Ereignis hört sich interessant an, wobei ich aber etwas skeptisch bin da er ja nicht das ausblenden als Fehler meldet sondern

If Me.comBals_05 = 0 Then...

An der Stelle soll er ja nur prüfen ob im Feld "comBals_05 der Wert 0 steht

Ich werde es morgen testen.
Werde mich morgen melden ob es funktioniert.
Es nervt das ich es nicht gleich testen kann aber wenn ich jetzt noch mal auf Arbeit fahre, gibt es Ärger.

MzKlMu

Hallo,
Du brauchst das If nicht. Die Zuweisung des negierten Wahrheitswertes aus Not Me.comBals_05 = 0  reicht.

Du kannst auch davon ausgehen, wenn wir sagen dass das Ereignis falsch ist, dass das zutrifft. Beim Öffnen gibt es auch keine Fehlermeldung, es wird nur nichts gemacht.
Gruß Klaus