Office: (Office 2010) Unterformulare aufklappen

Helfe beim Thema Unterformulare aufklappen in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo Annika, ob Du nun ein Unterformular oder ein Popup-Formular verwendest, hängt davon ab, was Du mit dem Formular machen möchtest. Ein... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von anni92, 28. Februar 2013.

  1. Unterformulare aufklappen


    Hallo Annika,

    ob Du nun ein Unterformular oder ein Popup-Formular verwendest, hängt davon ab, was Du mit dem Formular machen möchtest.

    Ein Unterformular benutzt man in den meisten Fällen um Detaildatensätze zu einem Datensatz im Hauptformular anzuzeigen und möglicherweise sogar direkt zu bearbeiten. Hierfür kann das Unterformular direkt mit dem Hauptformular verknüpft werden und ändert dann seinen Inhalt analog zum Datensatzwechsel im Hauptformular.

    Ein Popup-Formular wird in der Regel dann verwendet, wenn man nicht grundsätzlich bei der Betrachtung des Hauptformulars auch die Detaildatensätze angezeigt haben muss. Bei Bedarf kann man das Popup über einen Button öffnen und muss diesem dann die entsprechenden Bedingungen für die anzuzeigenden Datensätze übergeben. (WHERE-Klausel) Will man jetzt hier noch Daten eingeben, die mit dem Datensatz im Hauptformular in Beziehung stehen sollen, so kommt im Gegensatz zur Eingabe im Unterformular ein klein bisschen Programmierarbeit hinzu, aber nichts wovor man zurückschrecken muss.

    Selbstverständlich kannst Du sowohl das eine als auch das andere Formular für alles Mögliche verwenden, und grundsätzlich kannst Du auch mit beiden Typen alles machen. Es hängt halt hauptsächlich davon ab, wann Du wie auf die Daten zugreifen möchtest.
     
    Johnny Loser, 5. März 2013
    #16
  2. Hi Johnny,

    das hast Du mir super erklärt! Ich würde mal sagen, ich beginne mal mit einem Kompromiss. Für die Unterforms mit mehreren Datensätzen möchte ich mir dann ein Popup anzeigen lassen. Nach längerem Rumwursteln geht bei mir jetzt ein Unterform-Popup auf, das mir alle zum Hauptform relevanten Datensätze anzeigt. Immerhin - bin stolz drauf. *cool.gif*

    Jetzt habe ich noch 2 Probleme:
    1. Öffnung des Popups erfolgt durch eine Befehlsschaltfläche (cmd4). Im Register sind ja mehrere Unterforms. Jetzt soll nur das Popup der aktiven (also sichtbaren) Registerseite geöffnet werden.
    2. Lässt sich die Länge des Registers an die Anzahl der Datensätze automatisch anpassen, also z.B. bei 1 Datensatz 5 cm, bei 3 Datensätzen dann 15 cm?

    Bis dann...
    Annika
     
    anni92, 6. März 2013
    #17
  3. Hi,

    habe jetzt die Probleme aus meinem letzten Beitrag gelöst:
    1. Da mir keine Lösung in VBA bekannt war, habe ich jedem Unterform eine Befehlsschaltflächen verpasst, so öffnet jedes Unterform für sich als Popup.
    2. Das habe ich mit "DoCmd.MoveSize" und der entsprechenden Zahlenwerte gelöst. Einige Unterforms sind zwar bei wenigen Datensätzen unten zu lang, ist aber nicht so schlimm.

    Jetzt ist mir folgendes aufgefallen: Trage ich im Unterform-Popup Daten ein, sind diese beim späteren Öffnen des Hauptforms nicht im Unterform drin. Es fehlt die Referenz-ID des Hauptforms im Unterform. Trage ich diese in die Tabelle ein, ist der Datensatz des Unterforms im Hauptform drin. Dies tritt eben nur auf, wenn ich die Daten ins Popup eintrage. Wie kann sowas automatisch zugewiesen werden?

    Bis dann,
    Annika
     
    anni92, 9. März 2013
    #18
  4. Unterformulare aufklappen

    Hi Annika,

    das ist das, was ich mit "ein klein bisschen Programmierarbeit" meinte.

    Im Gegensatz zum verknüpften Unterformular, in dem bei richtig erstellter Beziehung der Fremdschlüssel (Referenz-ID) automatisch in die Detailtabelle übernommen wird, musst Du im Popup alle Felder inkl. des Fremdschlüssels selbst zuweisen. Dies geschieht entweder per Direkteingabe in das entsprechende Feld bzw. - was ich zur Vermeidung von Fehleingaben empfehlen würde - mittels VBA vor Speicherung des Datensatzes.

    Ich sehe allerdings ein Problem, wenn Du heute in der Lage bist, einen Datensatz in der Detailtabelle anzulegen, bei dem der Fremdschlüssel fehlt. Dies weist auf eine nicht korrekt erstellte Beziehung zwischen Haupt- und Detailtabelle hin. Das Feld mit der Referenz-ID, wie Du sie nennst, muss im Entwurf so eingestellt sein, daß ein Wert zwingend erforderlich ist und es muss eine Beziehung zwischen Haupt- und Detailtabelle mit referenzieller Integrität und Aktualisierungsweitergabe vorhanden sein. Dann lässt Access das Anlegen "verwaister" Detaildatensätze erst gar nicht zu.

    So, um nun im Popup beim Anlegen eines neuen Detaildatensatzes den richtigen Fremdschlüssel mit einzutragen, gibt es verschiedene Möglichkeiten. Ich würde empfehlen, diesen beim Formular-Ereignis "Vor Aktualisierung" zu setzen. Dieses Ereignis tritt allerdings jedesmal ein, wenn ein Datensatz geändert wurde und abgespeichert werden soll. Daher wäre es sinnvoll, vor der Zuweisung zu prüfen, ob bereits ein Wert im Feld mit der Referenz-ID drin steht. (Achtung: Es darf kein Standardwert definiert sein)

    Ein möglicher Code wäre folgender:

    Code:
    An diser Stelle kannst Du bei Bedarf ebenfalls weitere Werte wie z.B. den User, der den Datensatz neu angelegt hat und/oder das Erstellungs-/Änderungsdatum automatisch eintragen sowie prüfen, ob alle Pflichtfelder ausgefüllt sind und das Speichern im Bedarfsfall mit Cancel = True abbrechen.
     
    Johnny Loser, 10. März 2013
    #19
  5. Hi Johnny,

    werde das mal in den nächsten Tagen ausprobieren und mich dann melden.

    Gruß
    Annika
     
  6. Hi Johnny,

    so, habe endlich mal wieder ein wenig Zeit gefunden und bin wieder da.
    Dein geposteter Code funktioniert super, Fremdschlüssel wird in Tabelle automatisch eingetragen.

    Was mir noch aufgefallen ist: Unter Umständen bekomme ich folgende Fehlermeldung angezeigt: "Laufzeitfehler 2452: Der von Ihnen eingegebene Ausdruck enthält einen ungültigen Verweis auf die Hauptobjekt-Eigenschaft."

    Und zwar passiert das nur dann, wenn ich beim Schließen des Unterform-Popups in irgendeinem bereits bestehenden Datensatz mit dem Cursor drin bin. Um das zu verhindern, muss ich vor dem Schließen des Popups den Cursor in einen neuen Datensatz positionieren oder ich muss das Unterform oben rechts mit dem "X" schließen.

    Noch eine Info dazu: Ich öffne und schließe das Unterform-Popup mit einem Doppelklick auf das Überschriften-Textfeld, so mache ich das mit allen Forms und möchte das auch beibehalten, hier der Code im Unterform (die rote Zeile ist die von der Fehlermeldung markierte Zeile):
    Code:
    Erklärung:
    lbl_ArtBestTeile0 -> Überschriften-Textfeld
    ArtBestTeile_ID -> ID des Unterforms
    form_Artikelstamm -> Hauptform
    form_Artikelbestandteile -> Unterform
    ArtBestTeile_ArtSt_ref -> Fremdschlüssel im Unterform
    ArtSt_ID -> ID des Hauptforms

    Funktionsweise:
    Doppelklicke ich das Unterform im Hauptform, öffnet sich das Popup, doppelklicke ich es erneut, schliesst es sich wieder.

    Bis dann,
    Annika
     
  7. Hi Annika,

    ich bin jetzt ein wenig irritiert, so ich doch annahm, Du öffnest Dein Popup als Dialog. Dies würde bedeuten, Du hättest auf Dein Hauptformular solange keinen Zugriff, bis daß das Popup geschlossen ist.

    Und dieses schließt Du ganz normal über Docmd.close acform, Me.Name
     
    Johnny Loser, 20. März 2013
    #22
  8. Unterformulare aufklappen

    Hi Johnny,

    Normalerweise öffne ich meine Tabellen und Formulare im Navigationsbereich auf der linken Seite des Access-Fensters und schließe sie mit einem Doppelklick auf die Überschrift. Ich hatte zwar in meinem Posting #17 geschrieben, das Popup mit einer Befehlsschaltfläche zu öffnen, habe mir aber im Nachhinein den o.g. Code gebastelt (um mir die Schaltflächen zu sparen), der ja auch funktioniert, was das Öffnen und Schließen an sich angeht.

    Habe es eben ausprobiert: Auch bei geöffnetem Unterform-Popup kann ich problemlos im Hauptform arbeiten.

    Habe Deinen Vorschlag umgesetzt
    Also statt:
    Code:
    Den:
    Code:
    Bekomme jetzt aber beim Öffnen bzw. Schließen folgende Meldung:
    "Fehler beim Kompilieren: Methode oder Datenobjekt nicht gefunden."

    Bis dann,
    Annika
     
  9. Hallo Annika,

    Johnni meinte tatsächlich

    Code:
    Das Me.Name bezieht sich auf den Namen des Formulars und ersetzt dir quasi "form_Artikelbestandteile".

    Warum man das besser benutzt hat folgenden Grund. Zum einen kannst du so einen Code in ein anderes Formular kopieren und dadurch Code Mehrfach verwednen, weil der Name der schließen Anweisung über Me.Name übergeben wird.
    Zum anderen musst du bei einer Änderung nicht immer den Namen noch ändern.

    Viele Grüße

    trekking
     
    trekking1, 21. März 2013
    #24
  10. Hi Annika,

    wenn Du das Popup nicht als gebundenen Dialog öffnest, bedeutet das, daß Du im Hauptformular weiter arbeiten kannst und möglicherweise nach einem Datensatzwechsel den Bezug zum Popup-Formular verlierst. Entweder Du betreibst den Aufwand, alle erdenklichen Bedienmöglichkeiten durchzuspielen und die dafür erforderlichen Fehlerbehandlungen zu programmieren, oder Du öffnest das Popup als Dialog und bist sorgenfrei.

    DoCmd.OpenForm "form_Artikelbestandteile", , , "ArtBestTeile_ArtSt_ref = " & ArtSt_ID , , acDialog

    Das damit geöffnete Popup-Formular musst Du erst wieder schließen, bevor Du im Hauptformular weiter arbeiten kannst.


    Außerdem ist mir grade erst aufgefallen, daß in der bei Dir angemeckerten Zeile ein Fehler steckt:

    "ArtBestTeile_ArtSt_ref=" & Parent!ArtSt_ID


    Mit Parent verweist Du aus dem Unterformular auf das Hauptformular. Dein Code wird jedoch im Hauptformular ausgeführt und somit erklärt sich auch die Fehlermeldung.
     
    Johnny Loser, 22. März 2013
    #25
  11. Hi trekking, hi Johnny,

    @ trekking: Danke für Deine Korrektur bezüglich "Me.Name", habe ich eingebaut, funktioniert jetzt prima.

    @ Johnny: Habe den Zusatz ", , acDialog" eingefügt, komme jetzt, wie vorgesehen, nicht mehr ans Hauptform heran, wenn das Unterform als Popup geöffnet ist.
    Danach habe ich den gesamten Code aus dem Unterform ins Hauptform übertragen und das "Parent!" entfernt. Doch jetzt reagiert der Code überhaupt nicht, wenn ich auf die Überschrift des Unterforms doppelklicke. Wenn ich in der Entwurfsansicht des Hauptforms auf die Überschrift des Unterforms klicke und unter "Beim Doppelklicken" den Code-Generator aufrufe, lande ich wieder im Unterform-VBA. Ich glaube, Access "will", dass ich den Code ins Unterform setze, wo er war. Wie komme ich jetzt aus diesem Dilemma raus?

    Bis dann,
    Annika
     
  12. Huhu, vergesst mich bitte nicht! *wink.gif*
     
    anni92, 2. April 2013
    #27
  13. Unterformulare aufklappen

    Hallo,
    wo und in welcher Ansicht klickst du auf die "Überschrift" (was ist damit gemeint?) des Unterformulars?
    Und wieso überhaupt hast du den Code ins Hauptformular verschoben?!

    Und noch etwas: Ist hier tatsächlich die Rede von Unterformularen oder geht es um eigenständige PopUp- (also Haupt-) Formulare?
     
    Anne Berg, 2. April 2013
    #28
  14. Hi Anne,

    zuerstmal Danke, dass Du Dich meines Problems angenommen hast. *Smilie

    Im Hauptform auf die Überschrift (Text im Formularkopf) "Artikelbestandteile" (welcher ich die Bezeichnung "lbl_ArtBestTeile" verpasst habe) des Unterforms "Artikelbestandteile".

    Siehe #25

    Es geht um richtige, im Hauptformular eingebundene Unterformulare, die ich mit einem Doppelklick auf die Überschrift als Popup öffne und schließe.

    Öffnen des Popups geht problemlos, Schließen bereitet nur dann Probleme, wenn der Cursor sich in einem Textfeld eines bereits existierenden Datensatzes (bei existierender ID) befindet. Dann kommt Fehlermeldung: "Laufzeitfehler 2452: Der von Ihnen eingegebene Ausdruck enthält einen ungültigen Verweis auf die Hauptobjekt-Eigenschaft."

    Befindet sich der Cursor jedoch in einem Textfeld eines neuen Datensatzes (bei dem noch keine ID existiert), klappt das Schließen seltsamerweise problemlos. Auf alle Fälle kann ich das Popup schließen (also unabhängig, ob neuer Datensatz existiert oder nicht, mit Klick auf das Kreuz oben rechts. Ich möchte es jedoch auch schließen können, wenn ich mich "versehentlich" in einem bestehenden Datensatz befinde.

    Bis bald,
    Annika
     
    anni92, 3. April 2013
    #29
  15. Hi,
    komplizierter geht's wohl kaum.
    Meinst du vielleicht das zum UF-Steuerelement namens "Artikelbestandteile" gehörende Bezeichnungsfeld (-> Label) mit dem Namen "lbl_ArtBestTeile"?
    Und auf Doppelklick auf dieses Bezeichnungsfeld willst du das UF nochmals als PopUp-Formular öffnen? Wozu das?!
    (sorry, ich habe noch nicht alle Beiträge gelesen)

    Ich bekomme es übrigens nicht hin, dass ein UF-Beschriftungsfeld auf Klick-Ereignisse reagiert, sie werden einfach nicht ausgelöst. (A2003)

    Ich würde dazu gern mal eine Beispiel-DB sehen, damit kommen wir sicher schneller zu einer Lösung.
     
    Anne Berg, 3. April 2013
    #30
Thema:

Unterformulare aufklappen

Die Seite wird geladen...
  1. Unterformulare aufklappen - Similar Threads - Unterformulare aufklappen

  2. Schriftart einer Tabelle im Unterformular verändern

    in Microsoft Access Hilfe
    Schriftart einer Tabelle im Unterformular verändern: Hallo, wie kann ich die Schriftart einer Tabelle ( Datenblatt ) im Unterformular verändern. Also nicht Global für alle! Mit freundlichen Grüßen
  3. Unterformular schrumpfen

    in Microsoft Access Hilfe
    Unterformular schrumpfen: Hallo, ich stehe gerade vor dem Problem, dass ich eine DB auf Rechnern mit verschiedener Auflösung laufen lasse. Meine Lösung: Alle Steuerelemente um den Faktor 0,73 verkleinern, ebenso deren...
  4. MS Access Formular: Datensatz duplizieren mit Unterformularen

    in Microsoft Access Hilfe
    MS Access Formular: Datensatz duplizieren mit Unterformularen: Hallo Ihr Lieben, ich bin ziemliche Anfängerin bei MS Access also nehmt es mir nicht übel, wenn ich Dinge falsch bezeichne etc. :) Ausganslage Ich hab ein Hauptformular (1) (Angaben zur...
  5. Listenfeld im Endlosformular

    in Microsoft Access Hilfe
    Listenfeld im Endlosformular: Hallo in die Runde! Ich stehe gerade furchtbar auf dem Schlauch und hoffe, ihr könnt mir helfen: Problemkind ist eine Art Zimmerverwaltung: - jedes Zimmer hat eine ID und ist einem Objekt...
  6. Spaltenposition in Unterformular ermitteln

    in Microsoft Access Hilfe
    Spaltenposition in Unterformular ermitteln: Hallo, ich habe ein Unterformular erstellt, welches auch direkt editierbar ist. Das funktoniert soweit gut. Nun möchte ich in VBA aber abfragen in welcher Spalte der Cursor aktuell steht. In...
  7. Formular/ Unterformular/ m:n Beziehung

    in Microsoft Access Hilfe
    Formular/ Unterformular/ m:n Beziehung: Hey Ihr Lieben, ich versuche nun ein schickes Formular zu erstellen. Von der Haupttabelle gehen ca. acht 1:n Tabellen ab, hiervon ca. vier n:m Tabellen. Mein Ziel: Das Formular so weit es geht...
  8. ID von Unterformular auf Registersteuerelement auslesen

    in Microsoft Access Hilfe
    ID von Unterformular auf Registersteuerelement auslesen: Hallo, ich hoffe mir kann jemand weiterhelfen. Normalerweise lese ich das ID-Feld wie folgt bei einem Unterformular auf einem Hauptformular aus:...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden