Guten Morgen,
mit diesem Code führe ich per Knopfdruck Berechnungen in allen Datensätzen im Hauptformular durch.
Wie springe ich nun in das Unterformular ab?
d.h. erster Datensatz Hauptformular, alle Daten des Unterformulars durchlaufen, nächster Datensatz im Hauptformular, ...
Private Sub ...()
Dim i As Long
Dim t As Long
Dim dbs As DAO.Database, Rst As DAO.Recordset
Set dbs = CurrentDb
Set Rst = Me.Recordset
DoCmd.GoToRecord , , acFirst
t = Me.Recordset.RecordCount
For i = 1 To t
"Auslesen von Feldern im Hauptformular, die ich zur Berechnung im UF benötige"
[color=red]"Wie springe ich hier zu den Daten im Unterformular ab?"[/color]
Rst.MoveNext
Next i
End Sub
Danke & VG
Güntre
Hallo,
im Regelfall macht man datensatzbezogene Berechnungen in Abfragen.
Dann braucht es keinen Code.
Was berechnest Du denn und wie hängen Hafo und Ufo zusammen ?
Hallo,
Zitat"Wie springe ich hier zu den Daten im Unterformular ab?"
http://www.donkarl.com/?FAQ4.2
Hallo,
Beziehung 1:n mit ref. Integrität
Hauptformular:
Kunde
Filiale
EUR
Std pro Filiale
Unterformular:
Datum
Mitarbeiter
Stunden
Stundenlohn
Berechnung UF:
Die EUR aus dem HF auf alle Mitarbeiter im UF in Abhängigkeit von deren Stundenlohn und Stundenanzahl und der Summe aller Std pro Filiale aufteilen;
es kann vorkommen, dass zu einem Kunden/Filiale mehrere Datensätze vorhanden sind, da untersch. Tätigkeiten mit untersch. Mitarbeitern durchgeführt wurden,
d.h. die Summe der Std pro Filiale bestehen dann aus mehreren Datensätzen (es kann nicht die Stundensumme aus dem UF verwendet werden).
VG
Günter
Hallo,
das kannst Du ohne einen Buchstaben VBA Code direkt in einer Abfrage rechnen.
Hallo,
d.h. ich habe eine Abfrage, die auf dem Datensatz im UF steht.
Zusätzlich müsste ich in Abhängigkeit von Monat/Jahr den Stundensatz aus einer anderen Tabelle lesen und die Gesamtstunden nochmals aus einer anderen Abfrage lesen, also mind. 2 Abfragen in einer ...
Da erscheint mir der Weg über VBA übersichtlicher.
Dann stehe ich wieder am Anfang meiner Frage ...
Wie muss ich den Code erweitern, um auf die Daten des UF zu kommen? (evtl. in grün?)
Private Sub ...()
Dim i As Long
Dim t As Long
[color=green]Dim i1 As Long[/color]
[color=green]Dim t1 As Long[/color]
Dim dbs As DAO.Database, Rst As DAO.Recordset, [color=green]Rst1 As DAO.Recordset[/color]
Set dbs = CurrentDb
Set Rst = Me.Recordset
[color=green]Set Rst1 = Me!Unterformular.Form.RecordSet[/color]
DoCmd.GoToRecord , , acFirst
t = Me.Recordset.RecordCount
For i = 1 To t
"Auslesen von Feldern im Hauptformular, die ich zur Berechnung im UF benötige"
[color=green]t1 = Me!Unterformular.Recordset.RecordCount[/color]
[color=red]"wie springe ich jetzt auf den ersten Datensatz im UF?"[/color]
[color=green]For i1 = 1 to t1[/color]
[color=green]Berechnung[/color]
[color=green]Rst1.MoveNext[/color]
[color=green]Next i1[/color]
Rst.MoveNext
Next i
End Sub
VG
Günter
Hallo,
ich habe Dir doch einen Link gepostet, der genau Deine Frage beantwortet.... Oder wo ist dann das Problem? ::)
Hallo,
mein Problem ist, wie ich den Bezug (wie in dem Link von Dir) in meinem Code (der Schleife) einbaue.
Danke & VG
Günter
Hallo,
das Durchlaufen der Datensätze macht mAn keinen Sinn, da du es tatsächlich "physisch" (=sichtbar) tun müsstest, damit die Datensätze im UF sich durch den Datensatzwechsel im HF aktualisieren. Ein einmaliges Initialisieren von rst1 ist demnach nutzlos, das müsste schon in der Schleife passieren. Hinzu kommt, dass Datensätze im Ufo zusammengefast werden müssen, wenn sie zur selben Firma gehören. Ich denke, hier müsste eine andere Lösung gewählt werden, für einen konkreten Vorschlag fehlen jedoch die Detailkenntnisse.
Hallo,
das Durchlaufen macht Sinn, denn mein Ziel ist es, den errechneten Wert in die Tabelle zu schreiben (auch wenn es nicht die feine Art ist) und auch im Unterformular anzuzeigen.
Somit muss nur einmal im Monat, oder bei Änderungen, die Aktualisierung durchgeführt werden.
Ich möchte vermeiden, anschl. in div. Berichten jedesmal den Wert zu ermittlen.
VG
Günter
Hallo,
um es auch mal deutlich zu sagen: dieses Konzept ist Quatsch....
Lagere die Berechnung in eine Public Function aus, dann kann diese Funktion überall dort aufgerufen werden, wo sie gerade gebraucht wird.