Hallo Access-Profis,
eigentlich dachte ich, dass ich mit der vormaligen Lösung von Df6gl das meiste geschafft hätte, aber wieder einmal stecke ich fest und weiß nicht weiter.
Ich habe ein Hauptformular und darin zwei Unterformulare, die aber auf dieselbe Abfrage zugreifen. Da das ,,Geteilte Formular" als Ufo nicht funktioniert, habe ich Ufo2 in der Ansicht ,,Einzelnes Formular", Ufo3 dagegen in der ,,Datenblatt"-Ansicht formatiert.
Jetzt möchte ich per Doppelklick in den Datensätzen des Datenblattes (Ufo3) den jeweiligen Datensatz in Ufo1 in der Ansicht Einzelnes Formular darstellen.
Wenn ich in Ufo2 (Formular-Ansicht) mit dem Weiterschalten-Button andere Datensätze aufrufe, sollte in Ufo3 der jeweilige Datensatz markiert/hervorgehoben werden.
Für eine Hilfe wäre ich sehr dankbar.
Gromax
p.s.: Zur visuellen Verdeutlichung habe ich einen Screenshot angehängt.
Hallo,
eine Möglichkeit bestünde darin, ein Feld in UFO "Übersicht der Massnahmen" mittels der Bedingten Formatierung auf z. B. eine bestimmte Hintergrundfarbe zu setzen. Die Bedingte Formatierung enthielte einen Ausdruck, der den Primärschlüssel aus den UFOs "Bescheid" und "Übersicht der Massnahmen" auf Gleichheit prüft.
Ausdruck ist --- Parent![PKFeld] = [PKFeld]
Hallo,
die Tabelle, die als Basis von Ufo2 und Ufo3 eingesetzt wird muss zwingend einen eindeutigen Primärschlüssel haben, den kann ich in den Formularen allerdings nicht finden, das ist weiter nicht schlimm, er muss ja nicht sichtbar gemacht werden, muss jedoch in der datenquelle der Formulare enthalten sein. Dann kannst du im Doppelklick-Ereignis von Ufo3 folgenden Code einsetzen:Me.Parent!ufo2.Form.Recordset.Findfirst "ID=" & Me.ID
Im Formular-Ereignis "Beim Anzeigen" von Ufo2 kannst du folgendermaßen auf den Datensatzwechsel reagieren:Me.Parent!ufo3.Form.Recordset.Findfirst "ID=" & Me.ID
Zusätzlich kannst du dann in Ufo3 auch noch die bedingte Formatierung einsetzen, die Datensatzmarkierung erfolgt jedoch nur mit Hilfe von FindFirst oder Einsatz der Bookmark-Methode.
Hallo MaggieMay,
vielen Dank für Deinen Vorschlag!
Ich habe den Code so umgesetzt und es funktioniert prima - aber nur bedingt:
Wenn ich das Hauptformular starte, meldet mir Access einen Laufzeitfehler " '2455' - Sie haben einen Ausdruck eingegeben, der einen ungültigen Verweis auf die Form/Report-Eigenschaft enthält.
Mein angepasster Code in Ufo2 lautet mit dem Verweis auf Ufo3 (frm_Schueler_ufoBearbeitung03Liste) wie folgt:
Private Sub Form_Current()
Me.Parent!frm_Schueler_ufoBearbeitung03Liste.Form.Recordset.FindFirst "BEA_PS=" & Me.BEA_PS
End Sub
Wenn ich den Debugger dann zurücksetze, funktioniert alles bestens; die beiden Formulare sehen sich und synchronisieren genau so, wie es sein soll. Auch das Aufrufen im HF von anderen Datensätzen funktioniert bestens.
Schließe ich aber das Formular oder beende ich Access, so muss ich nach dem Neustart erst wieder den Debugger zurücksetzen.
Hoffentlich ist das nur eine Kleinigkeit. Für Deine Unterstützung vorab vielen Dank!
Mit Doppelklick
gromax
Hallo MaggieMay,
jetzt habe ich einfach eine Fehler-Routine eingegeben
"On Error resume Next"
... und es klappt!
Wenn dies so programmiertechnisch in Ordnung ist*, mach ich mich an den Vorschlag von Franz und dann bin ich wahrscheinlich auch bald fertig!
* Ich weiß, ich hab noch einen weiten Weg vor mir!
Viele Grüße nochmals
gromax
Hi,
durch temporäres Deaktivieren des Ereignisses "Beim Anzeigen" läßt sich der Fehler vermutlich ohne "on error resume next" vermeiden.
In der Art:
Bei den Unterformularen im Ereignis "Beim Öffnen" einfügen:
Me.OnCurrent = ""
Bei dem Hauptformular im Ereignis "Beim Öffnen" einfügen:
Me!Name_des_Unterformulars_1.Form.OnCurrent = "[Event Procedure]"
Me!Name_des_Unterformulars_2.Form.OnCurrent = "[Event Procedure]"
"Name_des_Unterformulars_1" und ".._2" sind an Deine Namen anzupassen.
Harald
Hallo Harald,
vielen Dank für Deine Unterstützung. Diese Vorgehensweise funktioniert bis auf die eingebauten Buttons zum Vor- und Zurückblättern der Datensätze.
Komme ich nämlich ans Ende der Datensätze, so kann kein neuer Datensatz angeführt werden. Trage ich "On Error resume Next" wieder ein, funktioniert auch dieses tadellos. Warum das so ist, kann ich nicht sagen, aber dazu meine Frage: Ist die Verwendung der Fehlerbehandlungsroutine "On Error..." problematisch? Oder kann ich diese bedenkenlos einsetzen?
Für eine Antwort bin ich dankbar.
Jetzt wollte ich noch einen Punkt klären, den ich mit den Code-Beispielen von MaggieMay (s.o.) zwischen zwei Unterformularen schon lösen konnte. Das funktioniert bestens.
Wie kann ich mit Doppelklick von einem Listenfeld mit aufgeführten Schülernamen zu deren Datensatz im Unterformular (Ufo1) schalten. Mit einem Makro komme ich auf den richtigen Schüler, aber eben nicht zu dessen richtigem Datensatz! Da sollte ein Datensatz des Schülers aufgerufen werden, der zwar mit dem beauftragten Gutachten, aber eben noch ohne Eingangsdatum des Gutachtens versehen ist. In meinem Formular wird immer ein Datensatz angezeigt, der bereits bearbeitet ist, so dass ich mit Hilfe der Buttons zum noch "offenen" Auftrag klicken muss. Erst jetzt kann der Auftrag abschließend bearbeitet und damit der Datensatz vervollständigt werden.
Näheres im beiliegenden Screenshot.
Vorab vielen Dank für die prima Hilfe innerhalb dieses Forums.
Viele Grüße
gromax
Hallo,
Zitat von: gromax am September 15, 2014, 22:39:58Komme ich nämlich ans Ende der Datensätze, so kann kein neuer Datensatz angeführt werden. Trage ich "On Error resume Next" wieder ein, funktioniert auch dieses tadellos. Warum das so ist, kann ich nicht sagen
mit "On Error Resume Next" werden Fehler ignoriert, sie treten zwar auf, aber du bekommst nichts davon mit. Das Ergebnis des ausgeführten Codes ist aber u.U. ungewiss.
Was das Blättern betrifft, so ist es halt so, dass Access feststellt, wenn du über das Ende heraus zu blättern versuchst bzw. vor den Anfang. Da dies nicht geht, wird ein Fehler erzeugt. Den kannst du abfangen, gezielt abfragen und darauf reagieren oder ihn auch ignorieren. Das kommt halt auf die Situation bzw. die programmiertechnischen Ansprüche an.
ZitatIst die Verwendung der Fehlerbehandlungsroutine "On Error..." problematisch?
Eine Fehlerbehandlung egal welcher Art sollte eigentlich jede Prozedur enthalten. Wenn du mit "..."
Resume Next meinst, so sollte man das tatsächlich nur in Ausnahmefällen und im Bewusstsein aller damit verbundenen Risiken einsetzen.
ZitatWie kann ich mit Doppelklick von einem Listenfeld mit aufgeführten Schülernamen zu deren Datensatz im Unterformular (Ufo1) schalten.
Dazu musst du das Unterformular an eine entsprechende Abfrage binden. Wandele das Makro in VBA-Code um und zeig den mal her, dann sehen wir weiter.
Hallo MaggieMay,
Du hast mich bzgl. der Fehlerbehandlungsroutinen sensibilisiert; ich muss mich da eingehender drum kümmern!
Das eingebettete Makro habe ich nicht in VBA-Code umwandeln können, aber über das Internet habe ich folgenden Code gefunden, der die analoge Funktion erfüllt.
Private Sub Liste56_DblClick(Cancel As Integer)
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[SuS_PS] = " & Str(Nz(Me![Liste56], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
Das Unterformular ist von SuS_FS (FS=Fremdschlüssel) nach SuS_PS (PS=Primärschlüssel) verknüpft; das Listenfeld [Liste56] ist ein Steuerelement des Hauptformulars und nimmt die Schülernamen auf, zu denen kein Gutachten (Feld [BEA_Gutachten]="") vorliegt und deren Termin der Beauftragung (Feld [BEA_Beauftragung]) liegt länger als 8 Wochen in der Vergangenheit!
In einer Abfrage habe ich ein Feld mit der Bezeichnung "Meldung:Wenn([BEA_Gutachten]>0;"";Wenn(Jetzt()>DatAdd("ww";8;[BEA_Beauftragung]);"X";Null))" generiert und lasse die angezeigten "X" filtern.
Ich hoffe, das kommt nachvollziehbar rüber?!
Danke vorab für Deine Unterstützung
gromax
ZitatDas eingebettete Makro habe ich nicht in VBA-Code umwandeln können
Das geht über folgenden Umweg:
- eingebettetes Makro öffnen
- alles markieren (Strg+A)
- alles kopieren (Strg+C)
- schließen
- neues Makro öffnen
- alles einfügen (Strg+V)
- speichern, falls erforderlich
Anschließend steht in dem neu erstellten Makro die Funktion zur Konvertierung in VBA-Code zur Verfügung.
Es würde die Sache schon sehr vereinfachen, wenn man den "Originalcode" sehen und anpassen könnte.
Und bitte, benutze die Code-Tags, wenn du ihn zeigst.
Hallo MaggieMay,
ich habe den Code generiert:
Function Makro3()
On Error GoTo Makro3_Err
DoCmd.SearchForRecord , "", acFirst, "[SuS_PS] = " & Str(Nz(Screen.ActiveControl, 0))
Makro3_Exit:
Exit Function
Makro3_Err:
MsgBox Error$
Resume Makro3_Exit
End Function
Hoffentlich hilft das weiter!?
Viele Grüße
gromax
Hallo MaggieMay,
man lernt halt ständig dazu - gut so!
Function Makro3()
On Error GoTo Makro3_Err
DoCmd.SearchForRecord , "", acFirst, "[SuS_PS] = " & Str(Nz(Screen.ActiveControl, 0))
Makro3_Exit:
Exit Function
Makro3_Err:
MsgBox Error$
Resume Makro3_Exit
End Function
Viele Grüße
gromax
Hi,
ZitatDa (-> in Ufo1) sollte ein Datensatz des Schülers aufgerufen werden, der zwar mit dem beauftragten Gutachten, aber eben noch ohne Eingangsdatum des Gutachtens versehen ist.
dann sollte das aus dem HF heraus bspw. folgendermaßen funktionieren:
Private Sub Liste56_DblClick(Cancel As Integer)
Dim rs As Object
Set rs = Me.Ufo1.Form.Recordset.Clone
rs.FindFirst "[SuS_FS] = " & Me![Liste56] & " AND BEA_Gutachten Is Null"
If Not rs.EOF Then Me.Ufo1.Form.Bookmark = rs.Bookmark
Set rs = Nothing
End Sub
PS:
Der von dir "« am: September 16, 2014, 00:34:22 »" gezeigte Code war ja schon fast brauchbar, da wäre die Makroumwandlung gar nicht nötig gewesen.
Sorry, das war mir nicht klar.
Hallo MaggieMay,
ich habe Deinen Code nun angepasst:
Private Sub Liste56_DblClick(Cancel As Integer)
Dim rs As Object
Set rs = Me.frm_Schueler_ufoBearbeitung03.Form.Recordset.Clone
rs.FindFirst "[SuS_FS] = " & Me![Liste56] & " AND BEA_Gutachten Is Null"
If Not rs.EOF Then Me.frm_Schueler_ufoBearbeitung03.Form.Bookmark = rs.Bookmark
Set rs = Nothing
End Sub
jetzt zeigt das Ereignis Doppelklick in [Liste56] folgendes Verhalten:
Bei Doppelklick auf einen Schüler aus [Liste56] geht zuerst gar nichts. Rufe ich händisch im Listenfeld des HF eben diesen Schüler aus [Liste56] auf, so stellt das HF dessen Daten dar, ebenso die UFOe, erst jetzt funktioniert der anschließende Doppelklick und stellt den betreffenden Datensatz mit "BEA_Gutachten Is Null" wie gewünscht dar.
Kann man in den Code nicht einbauen, dass nach Doppelklick in [Liste56] zuerst der Schüler im Hauptformular (vermutlich mit [SuS_PS]) aufgerufen und im gleichen Ereignis der Datensatz mit "BEA_Gutachten Is Null" dargestellt wird? Das wäre perfekt!
Viele Grüße
gromax
Hallo MaggieMay,
jetzt bin ich es nochmals und erbitte Deine Zustimmung; ich habe mit dem Code vom 16. September und Deinem Code eine Synthese "gebastelt" - programmiert wäre einfach falsch - und habe jetzt folgende VBA-Anweisung:
Private Sub Liste56_DblClick(Cancel As Integer)
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[SuS_PS] = " & Str(Nz(Me![Liste56], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
Set rs = Nothing
Set rs = Me.frm_Schueler_ufoBearbeitung03.Form.Recordset.Clone
rs.FindFirst "[SuS_FS] = " & Me![Liste56] & " AND BEA_Gutachten Is Null"
If Not rs.EOF Then Me.frm_Schueler_ufoBearbeitung03.Form.Bookmark = rs.Bookmark
Set rs = Nothing
End Sub
Könntest Du mal drüber schauen; es scheint zu funktionieren?!
Vielen Dank vorab!
gromax
Hallo,
wenn es funktioniert, ist es ja gut, da könnte man höchstens hinterfragen, warum das so ist. ;)
Ich war davon ausgegangen, dass das HF und das Listenfeld im HF in einer Beziehung zueinander stünden, das scheint aber nicht der Fall zu sein. Daher musst du sowohl das HF als auch das UF mit der Auswahl im Listenfeld synchronisieren. Möglicherweise spielt da auch noch die Verknüpfung von HF und UF eine Rolle.
ZitatRufe ich händisch im Listenfeld des HF eben diesen Schüler aus [Liste56] auf
Wie (genau!) gehst du da vor? Ich dachte, die Auswahl des Schülers erfolgt über das Listenfeld.
Hallo MaggieMay,
sorry, ich habe auf dem HF ein Kombinationsfeld, kein Listenfeld und schon gar nicht das Listenfeld [Liste56].
Im Kombinationsfeld rufe ich alle hinterlegten Schüler auf und deren Daten werden dargestellt.
Trotzdem danke für Deine Unterstützung; Du hast mir wirklich prima geholfen und ich hätte nicht gedacht, dass ich dies noch schaffe! Klasse!
Viele Grüße
gromax
Zitat von: gromax am September 16, 2014, 00:34:22das Listenfeld [Liste56] ist ein Steuerelement des Hauptformulars
Zitat von: gromax am September 17, 2014, 23:05:13sorry, ich habe auf dem HF ein Kombinationsfeld, kein Listenfeld und schon gar nicht das Listenfeld [Liste56]
Ja, da kommt Freude auf!
Naja, Hauptsache, dir wurde geholfen. :-)