Ich habe da ein paar grundsätzliche Verständnisprobleme.
Formular mit den Stammdaten heißt KUNDEN. Im weiteren Verlauf F1 genannt.
Unterformular heißt BESUCHSBERICHTE. Im weiteren Verlauf UF1 genannt.
UF1 erhält seine Daten aus der Abfrage "Besuchsbericht Sortiert Datum".
Ändere ich im F1 den DS so werden in UF1 die entsprechenden Besuchsberichte gezeigt.
Alles wunderbar in Funktion.
Da aber in diesem Unterformular maximal 3 Berichte zu sehen sind,
muss man dann auf dem Scrollbalken blättern.
Jetzt habe ich mir ein Makro geschrieben, dass dieses Unterformular im Vollbildmodus seprarat öffnet.
Aktion 1 - Öffnen Formular
Aktion 2 - Maximieren
Das Problem ist, dass ich jetzt ALLE Besuchsberichte ALLER Kunden sehe.
Ich möchte aber nur die Berichte des Kunden sehen, der gerade im F1 gezeigt wird.
Muss ich da noch eine Verknüpfung erstellen?
Wo muss ich was eintragen, damit das geht?
Hallo
kleiner Tipp, vermeide Makros.
Besser so.
Wähle ein Feld im UFO aus.
Dann schreibe beim Ereignis "Bei Doppelklick" diesen Code hinein.
( ID ist der Name des Autowertes )
Zitat
DoCmd.OpenForm "NamedeinerTabelledesUfos", , , "IDNr=" & Me!IDNr, , acDialog
Jetzt kannst du indem du in diesem Feld einen doppelklick ausführst das Form öffnen
Gruss
Bernie
Hallo Bernie,
ich habe den Code exakt so in das Ereignis "Bei Doppelklick" für die entsprechende Textbox eingegeben.
Nach Doppelklick erscheint als Fehler
Access kann das Makro "docmd" nicht finden.
Kannst du mir das etwas näher bringen?
Ich bin leider (noch) nicht so fit in Access.
Nachtrag.
Jetzt lese ich gerade das mit dem ID Autowert.
Ich glaube, hier liegt vielleicht ein Mißverständnis vor.
Die Kundennummer ist doch entscheidend, dass alle Besuchsberichte DES Kunden gezeigt werden,
der im Oberformular gezeigt wird.
Die ID ist doch ein einmaliger Wert für jeden einzelnen DS.
Oder sehe ich das falsch?
Hallo,
"exakt so in das Ereignis "Bei Doppelklick" für die entsprechende Textbox eingegeben"
ist falsch... Klicke auf die rechts dieser "Textbox" stehende 3 Pünktchen, wähle Ereignisprozedur (oder "Code") und füge den Code im VBA-Editor in die vorbereitete Prozedur ein.
Der Code muss aber noch an Deine Situation angepasst werden, das heißt es müssen statt "IDNR" die in der Tabelle und im Form benutzten Schlüsselfeld-Namen (Fremdschlüsselfeld in Tabelle "Besuchsberichte" und Primärschlüsselfeld in Tabelle Kunden) eingesetzt werden. Dito für den Formularnamen, so wie er im Datenbankfesnter , bzw. im Navi-Bereich für das "Unterform" lautet.
DoCmd.OpenForm "BESUCHSBERICHTE", , , "Besuchsberichte_KundenID=" & Me!KundenID, , acDialog
Ansonsten beim Makro "Aktion 1 - Öffnen Formular" die Parameter entsprechend in die einzelnen Zeilen eben eingeben....
Tja, ich hacke hier rum ohne Ende,
aber ich kriege hier nichts gebacken.
Mit VBA habe ich schon so einiges in Excel gemacht.
Aber Access scheint eine eigene Welt zu sein.
Den VBA Code eingeben klappt schon mal gar nicht.
Ich weiß gar nicht welche Befehle ich hier eingeben soll.
Wenn ich das Makro erstelle,
Aktion 1 - Öffnen Formular
Aktion 2 - Maximieren
Aktion 3 - ????
Aktion 4 - ?????
Da muss doch irgendwo die Verknüpfungsbedingung zwischen Hauptformular
und Unterformular eingetragen werden.
Die Verknüpfung ist meine Kundennummer KNR.
Ich verstehe das nicht.
Ich habe in den Beziehungen zwischen Hauptformular und Unterformular eine Verknüpfung KNR stehen.
Das funktioniert doch auch.
Hallo,
Zitat
"Den VBA Code eingeben klappt schon mal gar nicht."
warum nicht?
Beim Makro:
ÖffnenFormular:
Formularname BESUCHSBERICHTE
Bedingung: KNR = Formulare!Kunden!Knr
Fenstermodus: Dialog
Hallo,
den Schilderungen nach, ist das ja eine klassische Hafo/Ufo Konstruktion, da fehlt meiner Meinung nach einfach nur die Verknüpfung zwischen Hafo und Ufo.
Dazu sind in den Dateneigenschaften des Ufos die Eigenschaften "Verknüpfen von/nach" mit den Schlüsselfeldern zu füllen. Also einfach 2x KNR.
Die Abfrage für das Ufo darf dann kein Kriterium enthalten.
So Leute,
Private Sub KNR_DblClick(Cancel As Integer)
DoCmd.OpenForm "Besuchsberichte", , , "Besuchsberichte_KNR=" & Me!KNR, , acDialog
End Sub
Das steht nun drin.
Ich mache einen Doppelklick auf die Textbox im Unterformular.
Es öffnet sich ein Fenster und ich soll für meine Kundennummer KNR einen Wert eingeben.
Dabei mache ich genau auf diese Textbox wo diese KNR steht den Doppelklick.
Und als ich die KNR eingegeben habe, öffnet sich ein neues Formular und zeigt mir ALLE Berichte aller Kunden an.
Das genau wollte ich nicht erreichen.
Hallo,
ich ziehe meine Antwort von vorhin zurück, soll doch ein extra Formular sein.
Ändere mal den Code wie folgt, hast Du auch falsch angepasst:
Private Sub KNR_DblClick(Cancel As Integer)
DoCmd.OpenForm "Besuchsberichte", , , "KNR=" & Me!KNR, , acDialog
End Sub
Welcher Datenmtyp hat KNR, Text oder Zahl?
Vor einer Stunde stand ich noch am Rande des Abgrunds.
Jetzt bin ich schon einen Schritt weiter.
Aber leider noch nicht erfolgreich.
DoCmd.OpenForm "Besuchsberichte", , , "KNR=" & Me!KNR, , acDialog
Laufzeitfehler 2051
Die Aktion Open Form wurde abgebrochen.
Nachtrag:
Wenn ich es als Makro schreibe und
KNR = Formulare!Kunden!Knr
bei Filter eintrage
kommt die Meldung, dass das Objekt nicht gefunden wird.
Hallo,
wie wäre es, wenn Du auch meine Frage (Datentyp?) beantworten würdest?
Ist das Feld KNR auch auf dem Unterformular vorhanden und mit diesem Namen?
Oh sorry, das habe ich wohl übersehen.
Die Kundennummer KNR ist vom Typ TEXT.
Sie ist im Unterformular vorhanden und die Textbox, auf der ich per Doppelklick
das (neue) Formular öffnen und dann NUR die Berichte mit dieser KNR sehen möchte.
Hallo,
wenn Text sind Hochkomma zu verwenden.
Private Sub KNR_DblClick(Cancel As Integer)
DoCmd.OpenForm "Besuchsberichte", , , "KNR='" & Me!KNR & "'", , acDialog
End Sub
Ein Schlüsselfeld sollte im Regelfall aus Performancegründen nummerisch sein. Wieso ist KNR ein Textfeld?
Wenn da Buchstaben vorkommen solltest Du hier eine Autowertfeld als Primärschlüssel einbauen und dieses für die Beziehungen verwenden.
Nicht zu fassen.
Das funktioniert jetzt richtig gut.
Vielen Dank für die Hinweise dazu.
Eine Frage noch.
Im VBA Code steht hinten dran "acDialog".
Das bedeutet wohl, dass das Formular als neues Fenster geöffnet wird.
Gibt es da noch andere Vorgaben; z.B. das Formular auf screen max zu bringen?
Moin,
Zitat von: accessy am Oktober 23, 2012, 00:44:21
Gibt es da noch andere Vorgaben; z.B. das Formular auf screen max zu bringen?
Probier mal im Ereignis "Beim Öffnen":
DoCmd.MaximizeHarald
Herrlich.
Exakt alles nach meinen Vorstellungen.
Vielen Dank an Alle ACCESS Experten für die vielen Hinweise zu meinem Anliegen.
Wünsche allen einen schönen Tag.