Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Problem Aktualisierung Feld in übergeordneten Formular mittels VBA

Begonnen von tragger, Januar 27, 2013, 22:27:43

⏪ vorheriges - nächstes ⏩

tragger

Hallo Leute,

ich habe mal wieder ein Problem. Ich habe ein Formular mit einem Unterformular. Wenn ich im Unterformular etwas gemacht habe und das übergeordnete Formular aktualisiere:

If CurrentProject.AllForms("frmRechnungen_UFO").IsLoaded = True Then
                Me.Parent.Requery
            End If


soll sich das Feld Me.txtRestforderung aktualisieren. Es handelt sich um ein ungebundenes Textfeld, dass folgendermaßen im übergeordneten Formular gefüllt wird:

Private Sub Form_Current()
    If Not IsNull(Me.RechnungsNr) Then
        If Not IsNull(Me.Stornodatum) Then
            Me.txtRestforderung = Format(0, "##0.00") & " €"
        ElseIf Me.Mahnung = True Then
            Dim rechner As Double
            rechner = 0
            If Not Receivable(3, Me.RechnungsNr, Me.MitgliedsNr) = falsch Then
                rechner = Receivable(3, Me.RechnungsNr, Me.MitgliedsNr)
            End If
            rechner = rechner + Receivable(4, Me.RechnungsNr, Me.MitgliedsNr)
            rechner = rechner + (Receivable(2, Me.RechnungsNr, Me.MitgliedsNr) / 100 * 119)
            Me.txtRestforderung = Format(rechner, "##0.00") & " €"
        Else
            Me.txtRestforderung = Format(Receivable(1, Me.RechnungsNr, Me.MitgliedsNr) / 100 * 119, "##0.00") & " €"
        End If
    Else
        Me.txtRestforderung = Format(0, "##0.00") & " €"
    End If
End Sub


Ich habe auch schon "Form_AfterUpdate" probiert, aber auch das geht nicht. Wie bekomme ich dieses Feld da oben im oberen Formular aktualisiert, bzw. neu berechnet??? Oder wie funktioniert die Aktualisierung richtig und gehe ich in dem übergeordneten Formualr wieder zu diesem DS?

Wenn ich nur in dem übergeordneten Formuar etwas bearbeite und Me.Requery anwende und wieder zum bearbeiteten Datensatz gehe, funktioniert es.

Klingon 33

Hallo,

wandel deine Prozedur in eine ungebundene ab. so etwar

Private Sub BERECHNUNG_AUSFÜHREN()   
If Not IsNull(Forms!Parent!RechnungsNr) Then       
  If Not IsNull(Forms!Parent!.Stornodatum) Then
            Forms!Parent!.txtRestforderung = Format(0, "##0.00") & " €"
        ElseIf Forms!Parent!.Mahnung = True Then
            Dim rechner As Double
            rechner = 0
            If Not Receivable(3, Forms!Parent!.RechnungsNr, Forms!Parent!.MitgliedsNr) = falsch Then
                rechner = Receivable(3, Forms!Parent!.RechnungsNr, Forms!Parent!.MitgliedsNr)
            End If
            rechner = rechner + Receivable(4, Forms!Parent!.RechnungsNr, Forms!Parent!.MitgliedsNr)
            rechner = rechner + (Receivable(2, Forms!Parent!.RechnungsNr, Forms!Parent!.MitgliedsNr) / 100 * 119)
            Forms!Parent!.txtRestforderung = Format(rechner, "##0.00") & " €"
        Else
            Forms!Parent!.txtRestforderung = Format(Receivable(1, Forms!Parent!.RechnungsNr, Forms!Parent!.MitgliedsNr) / 100 * 119, "##0.00") & " €"
        End If
    Else
        Forms!Parent!.txtRestforderung = Format(0, "##0.00") & " €"
    End If
End Sub


Wenn du jetzt bei

If CurrentProject.AllForms("frmRechnungen_UFO").IsLoaded = True Then
                BERECHNUNG_AUSFÜHREN
            End If


eingibst, dann sollte es laufen.
Wer Fehler findet, dar diese behalten.

tragger

vielen Dank zunächst. Aber leider funktioniert die Abfrage nicht, ob das übergeordnete Formular auch geöffnet ist. Was mache ich mit dem falsch:

If CurrentProject.AllForms("frmRechnungen_UFO").IsLoaded = True Then
                BERECHNUNG_AUSFÜHREN
            End If


in frmRechnungen_UFO ist frmMahnungen_UFO als Unterformular enthalten. Was ich hier mache ist bei einer Aktion im Mahnungen-UFO im übergeordneten das aktualisieren, wenn dieses geöffnet ist, da natürlich sonst ein Fehler auftritt, falls man das Mahungen-Ufo alleine öffnen sollte...

Klingon 33

tschuldigung!
ich habe den Formularnamen falsch gelesen. Muss so aussehen:

Private Sub BERECHNUNG_AUSFÜHREN()   
If Not IsNull(Forms!frmRechnungen_UFO!RechnungsNr) Then       
  If Not IsNull(Forms!frmRechnungen_UFO !Stornodatum) Then
            Forms!frmRechnungen_UFO !txtRestforderung = Format(0, "##0.00") & " €"
        ElseIf Forms!frmRechnungen_UFO !Mahnung = True Then
            Dim rechner As Double
            rechner = 0
            If Not Receivable(3, Forms!frmRechnungen_UFO !RechnungsNr, Forms!Parent!MitgliedsNr) = falsch Then
                rechner = Receivable(3, Forms!frmRechnungen_UFO! RechnungsNr, Forms!frmRechnungen_UFO !MitgliedsNr)
            End If
            rechner = rechner + Receivable(4, Forms!frmRechnungen_UFO !RechnungsNr, Forms!frmRechnungen_UFO !MitgliedsNr)
            rechner = rechner + (Receivable(2, Forms!frmRechnungen_UFO !RechnungsNr, Forms!frmRechnungen_UFO !MitgliedsNr) / 100 * 119)
            Forms!frmRechnungen_UFO !txtRestforderung = Format(rechner, "##0.00") & " €"
        Else
            Forms!frmRechnungen_UFO !txtRestforderung = Format(Receivable(1, Forms!frmRechnungen_UFO !RechnungsNr,  _
            Forms!frmRechnungen_UFO !MitgliedsNr) / 100 * 119, "##0.00") & " €"
        End If
    Else
        Forms!frmRechnungen_UFO !txtRestforderung = Format(0, "##0.00") & " €"
    End If
End Sub

Wer Fehler findet, dar diese behalten.

DF6GL

Hallo,

naja, ob das so aussehen muss, lass ich mal dahingestellt....   ;)


Im Unterform und ohne Kenntnis der Receivable-Funktion:

Sub Form_Afterupdate()
Dim rechner As Currency
rechner = 0

    If Not IsNull(Me.Parent!RechnungsNr) Then   
        If Not IsNull(Me.Parent!Stornodatum) Then
            Me!txtRestforderung = Format(0, "0.00 €")    'es könnte gleich das Textfeld mit einer Formatangabe versehen werden.
        ElseIf  Me.Parent!Mahnung   Then
                If   Receivable(3, Me.Parent!RechnungsNr, Me.Parent!MitgliedsNr) = 0   Then   '   Wenn diese "Vergleichs-Logik" überhaupt stimmt....
                    rechner = Receivable(3, Me!RechnungsNr, Me!MitgliedsNr)
                End If
            rechner = rechner + Receivable(4, Me.Parent!RechnungsNr, Me.Parent!MitgliedsNr)
            rechner = rechner + Receivable(2, Me.Parent!RechnungsNr, Me.Parent!MitgliedsNr) *1.19
            Me.Parent!txtRestforderung = Format(rechner, "0.00 €")
        Else
            Me.Parent!txtRestforderung = Format(Receivable(1, Me.Parent!RechnungsNr, Me.Parent!MitgliedsNr) * 1.19 , "0.00 €")
        End If
    Else
        Me.Parent!txtRestforderung = Format(0, "0.00 €")
    End If

End Sub



tragger

geht nun, danke...

das mit der Vergleichslogik ging, wie oben, da ich in der Funktion Receivable Null zurückgebe...