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!?
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
>>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.
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.
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.
@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.
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.
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.
@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
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.
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
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.
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.
@ 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.
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.
Hallo Rene,
ZitatÄhh, ja. Deshalb verweise ich ja verzweifelt immer auf die Zeile:
If Me.comBals_05 = 0 Then...
Und wie würdest du denn dann die Fehlermeldung
ZitatDer von Ihnen eingegebene Ausdruck enthält einen
Feld-, Steuerelement- oder Eigenschaftennamen,
der von Microsoft Access nicht gefunden werden kann.
interpretieren ?
Kontrolliere den Namen des Steuerelementes!
gruss ekkehard
Hallo,
erst einmal die positive Nachricht, es funktioniert nachdem ich den Code von MzKlMu benutzt und ihn von Ereignis "Beim Öffnen" in den Detailbereich zum Ereignis "Beim Formatieren" verschoben habe.
Werde mich jetzt mal dafür interessieren wo da der Unterschied ist und warum es "Beim öffnen" nicht funktioniert. Denn so ganz verstehe ich es noch nicht.
>>Du kannst auch davon ausgehen, wenn wir sagen dass das Ereignis falsch ist, dass das zutrifft. <<
Message angekommen. Ich werde in Zukunft meine Zweifel für mich behalten.
An alle Danke für die Hilfe!
Hallo,
Zitatwarum es "Beim öffnen" nicht funktioniert. Denn so ganz verstehe ich es noch nicht.
Im Ereignis "Beim Öffnen" sind die
Inhalte der Felder noch nicht zugewiesen, die Felder werden sozusagen angelegt sind aber leer. Die Inhalte werden aber für den Vergleich benötigt, mit leeren Feldern kann man nichts vergleichen.
ZitatIch werde in Zukunft meine Zweifel für mich behalten
Das muss nicht sein, Zweifel kann man immer äußern. Ich habe mich auch schon geirrt. Nur in diesem Fall halt nicht. ;D
ZitatIm Ereignis "Beim Öffnen" sind die Inhalte der Felder noch nicht zugewiesen, die Felder werden sozusagen angelegt sind aber leer. Die Inhalte werden aber für den Vergleich benötigt, mit leeren Feldern kann man nichts vergleichen.
Hmm, also wird "Beim Öffnen" in Berichten anders behandelt als bei Formularen?
ZitatDas muss nicht sein, Zweifel kann man immer äußern.
Das las sich aber nicht so, vielleicht war ich auch nur etwas müde.
Hallo,
ZitatHmm, also wird "Beim Öffnen" in Berichten anders behandelt als bei Formularen?
Ja.
Das kannst Du auch leicht selbst testen, mit einer MsgBox:
MsgBox Me.comBals_05
Im Ereignis "Beim Öffnen" und "Beim Formatieren" des Berichts.
Und im Ereignis "Beim Öffnen" des Formulars.
Die beiden Ereignisse sind sich schon sehr ähnlich. Auch im Formular stehen im Beim Öffnen Ereignis noch keine Daten an - erst im Beim Laden Ereignis (was jedoch im Bericht für die Seitenvorschau nicht verwendet wird) kann darauf Bezug genommen werden.
Hallo,
ZitatAuch im Formular stehen im Beim Öffnen Ereignis noch keine Daten an
Bist Du sicher ?
Wenn ich eine MsgBox verwende wird mir der Inhalt eines Feldes angezeigt.
Spannend.
Formular "Beim Öffnen" i.O. - Bericht "Beim Öffnen" wieder Fehlermeldung, "Beim Formatieren" alles i.O.
Man lernt doch nie aus.
@Lachtaube
ZitatAuch im Formular stehen im Beim Öffnen Ereignis noch keine Daten an - erst im Beim Laden Ereignis
Aber in einem Formular hat mein Code im Ereignis "Beim Öffnen" funktioniert. Deshalb hat mich die Fehlermeldung im Bericht so irritiert.