Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

In einer Sub eine weitere Sub mit Rückmeldung an erster Sub

Begonnen von rve, Juni 23, 2025, 13:22:18

⏪ vorheriges - nächstes ⏩

rve

Liebe Community,

ich habe eine gut funktionierende Sub Form_AfterUpdate() für das Anhängen von neuen Datensätzen erstellt. Leider stellte sich jetzt heraus, dass ich bei bestimmten Konstellationen eigentlich eine Abfrage innerhalb der Sub generieren muss, damit ein bestimmtes Datum dann nicht bei dem Update übernommen wird.

Private Sub Form_AfterUpdate()
With Me.RecordsetClone
.Bookmark = Me.Bookmark
.Edit
!MA = GetUserName
!Timestamp = Now()

        Select Case IDVorgang
            Case 1, 6:                          'Eintritt, Quereinstieg
                !Beginn = Datum
                !Vermittelt = Null              'Auf Leer setzen
                !Verbleib = Null                'Auf Leer setzen
                !Grund = Null                  'Auf Leer setzen
                !Ende = Null                    'Auf Leer setzen
                !Ergebnis = Null                'Auf Leer setzen
                !dat_vermittelt = Null
                !dat_verbleib = Null
                !dat_grund = Null
                !dat_ende = Null
                !dat_ergebnis = Null

            Case 4:                            'Vermittlung
                !Vermittelt = Datum
                !dat_vermittelt = Datum
               
            Case 2:                            'Austritt
                !dat_vermittelt = Null          'das Datum der Vermittlung wird aktualisiert,
                !Vermittelt = Null              'Vermittlung taucht nicht mehr im Report auf
                !Ende = Datum
                !dat_ende = Datum
                !dat_grund = Datum


            Case 3:                            'Prüfung
                !dat_ergebnis = Datum
                If Ergebnis = "best." Then      'Nur wenn Prfg. bestanden wurde, Endedatum setzen
                    !Ende = Datum
                    !dat_ende = Datum
                End If

           
            Case 5:                            'Verbleib
                !dat_verbleib = Datum

        End Select
.Update
End With

Bei Case 3 (Prüfung) kommt es manchmal vor, dass TN ursprünglich vermittelt wurden aber dann die Maßnahme mit Case 2 (Austritt) beendet haben. Wenn jetzt die Rückmeldung kommt, dass diese TN ihre Prüfung bestanden haben, wird dies üblicherweise mit Case 3 dokumentiert. Dadurch wird aber jetzt ein neues Ende-Datum generiert, welches nicht korrekt ist, da hier das alte Ende-Datum vom Case 2 (Austritt) bleiben muss.

Bei der zweiten Sub könnte ich auf eine Abfrage mit Datum des Austritts zugreifen. Dieses Datum müsste ich dann in der Haupt-Sub statt des neuen Ende-Datums einsetzen.

Hoffentlich habe ich mich verständlich ausgedrückt. Wenn nicht, einfach nochmal fragen.

Hat jemand eine Idee, wie ich das hinbekomme?

LG, Rainer


Doming

Moin Rainer,

kannst Du bei der Aktualisierung des Prüfdatums nicht einfach abfragen, ob der TN nicht bereits aus der Maßnahme raus ist?
If Not isDate(!Vermittelt) Then !Ende = Date
Gruß
 Doming

Knobbi38

Hallo Rainer,

was du ansprichst wäre eine Funktion, welche ein bestimmtes Datum zurück liefert. Ein Blick in die Sprachreferenz hilft da sicherlich weiter. In deinem Fall würde aber auch einfach Dlookup() ausreichen, um das Datum aus einer Tabelle auszulesen.

Es ist eher unüblich, den aktuellen Datensatz im "Form_AfterUpdate"-Event in dieser Form erneut zu bearbeiten. Warum weist du die Werte nicht einfach den Feldern der Form selbst zu oder machst Vorgaben im Current-Event? An dieser Stelle solltest du deine Programmlogik vielleicht noch einmal überdenken.

Gruß Knobbi38

MzKlMu

allo,
was mir auffällt, wo kommt eigentlich die Variable "Datum" her ?
Da wird ja nichts deklariert ?
Ist das ein Formularfeld ?
Gruß Klaus

rve

Hallo zusammen, ich versuche mal so konkret wie möglich auf eure Ratschläge und Fragen zu antworten...

Zitat von: MzKlMu am Juni 23, 2025, 17:03:33allo,
was mir auffällt, wo kommt eigentlich die Variable "Datum" her ?
Da wird ja nichts deklariert ?
Ist das ein Formularfeld ?
Hallo MzKIMu,
ja, und es ist ein Endlos-Formular, sh. Case 1,6: die Felder des Datensatzes mit Eingabeoption sind von Datum bis Ergebnis und werden selektiv, d.h. je nach gewähltem Vorgang (IDVorgang) mit Daten gefüllt bzw. bleiben einfach leer.

Die Felder mit Prefix dat_ sind Hilfsfelder, um für verschiedene Auswertungen das jeweils letzte Datum abzufragen, da mehrere Datensätze für den gleichen TN möglich sind und ggfls. auch mehrere identische Vorgang-Eingaben erfolgen.

Das Formular ist ein Unterformular verknüpft über die TN-ID.

Zitat von: knobbi38 am Juni 23, 2025, 15:01:43Es ist eher unüblich, den aktuellen Datensatz im "Form_AfterUpdate"-Event in dieser Form erneut zu bearbeiten. Warum weist du die Werte nicht einfach den Feldern der Form selbst zu oder machst Vorgaben im Current-Event? An dieser Stelle solltest du deine Programmlogik vielleicht noch einmal überdenken.

Hallo knobi38,
die Historie der Einträge soll über die verknüpfte TN-ID im Endlos-Formular erhalten bleiben.

Zitat von: Doming am Juni 23, 2025, 14:00:44Moin Rainer,

kannst Du bei der Aktualisierung des Prüfdatums nicht einfach abfragen, ob der TN nicht bereits aus der Maßnahme raus ist?
If Not isDate(!Vermittelt) Then !Ende = Date
Gruß
 Doming

Hallo Doming,
es ist ein Endlos-Formular mit allen historischen Eingaben. Wenn der TN einmal vermittelt war aber dann die Maßnahme abgebrochen hat, gilt er nicht mehr als Vermittelt und das Feld Vermittelt ist leer (sh. Case 2 - Austritt).

Beispiel:
Sie dürfen in diesem Board keine Dateianhänge sehen.
 
Der letzte Eintrag im Endlos-Formular zeigt tatsächlich nur die Daten der letzten Vorgang-Eingabe. Die Auswertungen müssen aber auf alle Einträge zugreifen können, um die verschiedenen Berichte zu generieren.

Habe ich alle eure Fragen oder Hinweise beantworten können? Bin für alle Ideen dankbar, die mir meine Aufgabe erleichtern...

LG, Rainer
 

Doming

Zitat von: rve am Juni 24, 2025, 07:55:44Hallo Doming,
es ist ein Endlos-Formular mit allen historischen Eingaben. Wenn der TN einmal vermittelt war aber dann die Maßnahme abgebrochen hat, gilt er nicht mehr als Vermittelt und das Feld Vermittelt ist leer (sh. Case 2 - Austritt).

Moin Rainer,

es ging mir auch nicht darum, dass mein Schnipsel zu Deinem VBA-Code passt, ich wollte Dir zu Deinem Problem
ZitatDadurch wird aber jetzt ein neues Ende-Datum generiert, welches nicht korrekt ist, da hier das alte Ende-Datum vom Case 2 (Austritt) bleiben muss.
eine Lösungsmöglichkeit vorschlagen. Wie Du diesen Ansatz umsetzt, kann ich Dir nicht vorgeben, da muss schon etwas Gehirnschmalz von Dir dazu.

Gruß
 Doming

Knobbi38

Hallo Rainer,

Zitat... die Historie der Einträge soll über die verknüpfte TN-ID im Endlos-Formular erhalten bleiben.
Eine Historie wird eigentlich mit Hilfe von einem Timestamp umgesetzt und du bearbeitest ja den aktuellen Datensatz. In den Zusammenhang verstehe ich weder das Zitat noch gibt dein Screenshot mehr Einsicht. Das sieht eigentlich wie ein ganz normales Formular mit einem Subformular aus.

So ganz kann ich deinem Workflow hier nicht folgen.

Gruß Knobbi38