Hallo,
ich bin ganz neu hier und alles, was ich bisher in Access gemacht habe, habe ich mir irgendwie selbst beigebracht. Dabei habe ich VBA bisher vermieden. Nun möchte ich aber ein Formular so einrichten, dass einige Felder nur angezeigt werden, wenn ein Ja/Nein-Feld aktiviert wurde.
Ich habe dazu untenstehenden Code eingegeben, bekomme dann aber immer eine Fehlermeldung "Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden"
Markiert wird ".finanzierung". Kann es sein, dass dieses Feld nicht gefunden wird, weil es das nur in der Tabelle "Fahrzeuge" gibt? Falls ja, wie kann ich VBA dazu bringen, dass dieses Feld (und auch alle weiteren genannten Felder) in der Tabelle "Fahrzeuge" gefunden werden?
Hier nun der verwendete VBA-Code.
Private Sub Form_AfterUpdate()
' Prüfen, ob das Kontrollkästchen aktiviert (Ja/Wahr) ist
If Me.finanzierung.Value = True Then
' Felder einblenden
Me.eur_darlehnsbetrag.Visible = True
Me.txt_zinssatz.Visible = True
Me.txt_laufzeit.Visible = True
Me.dat_auszahlung.Visible = True
Me.dat_rate_beginn.Visible = True
Me.dat_rate_ende.Visible = True
Me.eur_annuität.Visible = True
Me.eur_annuität_laufzeit.Visible = True
Me.eur_zinsen_laufzeit.Visible = True
Else
' Felder ausblenden
Me.eur_darlehnsbetrag.Visible = False
Me.txt_zinssatz.Visible = False
Me.txt_laufzeit.Visible = False
Me.dat_auszahlung.Visible = False
Me.dat_rate_beginn.Visible = False
Me.dat_rate_ende.Visible = False
Me.eur_annuität.Visible = False
Me.eur_annuität_laufzeit.Visible = False
Me.eur_zinsen_laufzeit.Visible = False
End If
End Sub
Zitat von: Rainer_73 am Dezember 05, 2025, 15:53:20Markiert wird ".finanzierung". Kann es sein, dass dieses Feld nicht gefunden wird, weil es das nur in der Tabelle "Fahrzeuge" gibt? Falls ja, wie kann ich VBA dazu bringen, dass dieses Feld (und auch alle weiteren genannten Felder) in der Tabelle "Fahrzeuge" gefunden werden?
Die Fehlermeldung deutet tatsächlich darauf hin, dass es das Feld "finanzierung" in deinem *Formular* nicht gibt.
Tabellen sind hier nicht relevant, es geht ja um ein Formular. Schau im Entwurf des Formular nach, wie das Kontrollkästchen, das an das Feld "finanzierung" gebunden ist, heißt. Falls der Name Kontrollkästchen123 ist, solltest du es umbenennen zu "Finanzierung" oder "chkFinanzierung"und diesen Namen dann in deinem Code verwenden.
Hey, generell würde ich aber mal versuchen, die vielen Felder zu einem Tag zusammen zu fassen. Wenn es immer die gleichen sind die ein oder ausgeblendet werden sollen.
Du kannst allen betroffenen Feldern im Eigenschaftsblatt (Register ,,Sonstiges") einen gemeinsamen Tag geben, z.B. Gruppe1. Dann wie folgt ein oder ausblenden:
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.Tag = "Gruppe1" Then
ctl.Visible = False
End If
Next ctl
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.Tag = "Gruppe1" Then
ctl.Visible = True
End If
Next ctl
Gruß
Holger
Hallo,
ich empfehle Dir, die Umschaltung so zu machen:
Private Sub Form_AfterUpdate()
' Prüfen, ob das Kontrollkästchen aktiviert (Ja/Wahr) ist
Dim bolSichtbar As Boolean
bolSichtbar = (Me.finanzierung.Value = True)
Me.eur_darlehnsbetrag.Visible = bolSichtbar
Me.txt_zinssatz.Visible = bolSichtbar
Me.txt_laufzeit.Visible = bolSichtbar
Me.dat_auszahlung.Visible = bolSichtbar
Me.dat_rate_beginn.Visible = bolSichtbar
Me.dat_rate_ende.Visible = bolSichtbar
Me.eur_annuität.Visible = bolSichtbar
Me.eur_annuität_laufzeit.Visible = bolSichtbar
Me.eur_zinsen_laufzeit.Visible = bolSichtbar
End Sub
Das spart 50% Code ein und es ist viel einfacher zu warten.
Solltest Du bei einem Feld die umgekehrte Logik brauchen, schreibst Du einfach:
Me.MeinFeld.Visible = Not bolSichtbar
Außerdem empfehle ich Dir, sowas in eine eigene Sub im Formularcode zu hinterlegen. Vorteil ist, daß Du die Aktualisierung der Sichtbarkeit dann von vielen Stellen aus aufrufen kannst, da wäre als erstes "Form_Current", wenn der Datensatz angezeigt wird.
Gruß
Christian
Danke PhilS, das war schon mal ein Teil des Problems. Nachdem ich die Feldnamen im Formular nun angepasst habe, kann ich die Felder ein- und ausblenden. Allerdings leider nicht so, wie ich mir das vorgestellt habe.
Wenn ich das Ja/Nein-Feld namens Finanzierung aktiviere, muss ich erst die Bearbeitung schließen (auf den kleinen Stift unterhalb des Formulars klicken), dann werden alle anderen Felder eingeblendet. Und diese werden dann auch in den Datensätzen eingeblendet, in denen das Feld Finanzierung gar nicht aktiviert ist.
Hast du da auch noch eine Idee, was falsch sein könnte.
wie wäre es, das Ereignis des Kontrollkästchens zu nehmen, statt des Formulars?
Dann werden die betroffenen Felder direkt nach dem Klicken verschwinden.
Solche Formatierungsgeschichten lagere ich gern in eigene Sub um, dann wird der Ereigniscode übersichtlicher und man kann solche Formatierungen auch beim Wechsel des Datensatzes triggern (Form_Current).
Also
Kontrollkästchen_AfterUpdate
Elementesicht Me.Kontrollkästchen
End Sub
----------------------------------------------------------------------------------
Private Sub ElementeSicht(Sichtbar As Boolean)
Me.eur_darlehnsbetrag.Visible = Sichtbar
Me.txt_zinssatz.Visible = Sichtbar
Me.txt_laufzeit.Visible = Sichtbar
Me.dat_auszahlung.Visible = Sichtbar
Me.dat_rate_beginn.Visible = Sichtbar
Me.dat_rate_ende.Visible = Sichtbar
Me.eur_annuität.Visible = Sichtbar
Me.eur_annuität_laufzeit.Visible = Sichtbar
Me.eur_zinsen_laufzeit.Visible = Sichtbar
End Sub
Gruß
Doming
Hallo Rainer,
wenn du schon Präfixe für Steuerelemente verwendest, dann solltest du das auch durchgängig machen.
nur mal so am Rande ...
Knobbi38
Hallo,
Zitat... nur mal so am Rande ...
Auch am Rande (und meine persönliche Meinung):
Ich würde auf Präfixe bei Feldnamen unbedingt verzichten. Die machen nur Arbeit und sind nicht wirklich hilfreich, im Gegenteil. Dass die annuität ein Währungsfeld ist erkennt man auch am Namen, da braucht es kein Präfix.
Warum ist z.B. Zinssatz und Laufzeit ein Textfeld, sollten das nicht Zahlen sein ?
Wenn Du das jetzt ändern willst, musst Du txt in ein anderes Präfix ändern. Und das überall, in Tabellen, Abfragen, Formularfeldern, VBA Code. Was dann der oben erwähnten Arbeit entspricht.
Um das noch mal klar zu stellen, ich meine nur die Präfixe in den Tabellenfeldern.
@klaus:
Ich finde Feldnamen mit Präfixen auch nicht so gut, aber ich bin von Steuerelementnamen ausgegangen, weil ich bei der Eigenschaft ".Visible" nicht auf ein Feld-Objekt schließe.
Gruß Knobbi38
Zitat von: Rainer_73 am Dezember 05, 2025, 16:43:06Wenn ich das Ja/Nein-Feld namens Finanzierung aktiviere, muss ich erst die Bearbeitung schließen (auf den kleinen Stift unterhalb des Formulars klicken), dann werden alle anderen Felder eingeblendet. Und diese werden dann auch in den Datensätzen eingeblendet, in denen das Feld Finanzierung gar nicht aktiviert ist.
Hast du da auch noch eine Idee, was falsch sein könnte.
So direkt
falsch ist da nichts.
Dein Code behandelt das Form_AfterUpdate-Ereignis. Das tritt ein, wenn der ganze Datensatz gespeichert wird. Du kannst, wie hier von anderen bereits vorgeschlagen, das AfterUpdate-Ereignis des Kontrollkästchens verwenden, damit der Code sofort nach der Änderung des Wertes ausgeführt wird.
Dass alle angezeigten Datensätze von dem Ausblenden der Steuerelement betroffen ist, ist in einem
Endlosformular so. Das Formular ist für alle Datensätze gleich. Nur Eigenschaften, die eine unmittelbare Abhängigkeit von den Daten haben, werden pro Datensatz dargestellt.
Ein-/Ausblenden von Steuerelementen funktioniert in einem Endlosformular nicht pro Datensatz. Als Alternative kannst du eine
Bedingte Formatierung verwenden. Damit könntest du die nicht benötigten Steuerelemente, abhängig von dem Wert in Finanzierung, aktivieren oder deaktivieren.
@UlrichZitataber ich bin von Steuerelementnamen ausgegangen,
Auch dann ist das von mir gesagte zutreffend. Wobei ich überzeugt bin, dass die Tabellenfelder auch so benamt sind.