Neuigkeiten:

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

Mobiles Hauptmenü

Kniffliges rechnen mit VBA

Begonnen von xoius, April 27, 2020, 15:47:41

⏪ vorheriges - nächstes ⏩

xoius

Hallo zusamen,

heute habe ich einen Knoten im Kopf, weil ich Zahlen/Ergebnisse aus verschiedenen Tabellen brauche. Ich verstehe, wenn euch das ein zu großer Brocken ist, aber jeder Tipp ist hilfreich. Ich hatte zunächst versucht das Problem mit Abfragen zu lösen, aber dann kann ich im Endlosformular nichts mehr ändern, deshalb denke ich jetzt in Richtung VBA...

Ausgangssituation:
Ich habe folgende Tabellen

tblKosten
ID
KostenProduktID
GeleistetWann
KostenMitarbeiterID
Vertragsposition
GeleisteteStunden
AbrechnungExtern
AbrechnungIntern

tblPositionen
ID
PosProduktID
Position
ExternerStundensatz

tblStundensatz
ID
StundensatzMitarbeitereID
StundensatzIntern
GiltVon
GiltBis
GiltAktuell

Mit einer passenden Abfrage zu tblKosten stelle ich nun in einem Endlosformular die einzelnen Kosten für ein bestimmtes Produkt zusammen

Ziele
a. Im Endlosformular möchte ich in einem Textfeld den passenden tblStundensatz.StundensatzIntern ausgeben, also für den gilt StundensatzMitarbeiterID=KostenMitarbeiterID und ((tblStundensatz.GiltVon<=tblKosten.GeleistetWann und tblStindensatz.GiltAktuell=True) or (tblStundensatz.GiltVon<=tblKosten.GeleistetWann und tblStundensatz.GiltBis>=tblKosten.GeleistetWann)

Außerdem möchte ich bei Änderungen die Felder tblKosten.AbrechnungExtern und tblKosten.AbrechnungIntern wie folgt überschreiben:

tblKosten.AbrechnungExtern = tblStundensatz.StundensatzIntern*tblKosten.GeleisteteStunden mit passender Gültigkeit (s.o.)

tblKosten.AbrechnungIntern =
tblPositionen.ExternerStundensatz*tblKosten.GeleisteteStunden

Vielen Dank fürs Anschauen!

ebs17

ZitatIch verstehe, wenn euch das ein zu großer Brocken ist
Du würdest Dich wundern ...

Allerdings beginnt eine Problemansicht mit dem Blick auf das Beziehungsbild, weil dort Abhängigkeiten von Tabellen einfach sichtbar sind. Aber - irgendwie - hängt es da schon.

Allerdings: Wenn Du aktualisieren willst, wirst Du mit nur einem Formular nicht hinkommen, da sich die sonst verwendete Abfrage als nicht aktualisierbar herausstellen wird.
Mit freundlichem Glück Auf!

Eberhard

xoius

Hallo ebs17,

ich habe ein Bild der Beziehungen angehängt.

"Allerdings: Wenn Du aktualisieren willst, wirst Du mit nur einem Formular nicht hinkommen, da sich die sonst verwendete Abfrage als nicht aktualisierbar herausstellen wird."

Also wenn ich die Variable GeleisteteStunden im Endlosformular ändern möchte, kann ich nicht über einen "Speicher-Button" das gesamte Formular inkl. Abfrage aktualisieren?


xoius

Moin nochmal,

einen Schritt bin ich schon mal weiter. Mein Ziel war es ja folgendes in einem Textfeld anzeigen lassen

tblKosten.AbrechnungIntern = tblPositionen.ExternerStundensatz*tblKosten.GeleisteteStunden

Also hab ich dem Textfeld Kosten nun folgendes Zugeteilt:

Private Sub Form_Load()
Dim Lohn As Currency
Lohn = DLookup("[ExternerStundenlohn]","tblPositionen", "[PosProdukteID]=" & Me.KostenProduktID)
Kosten = Lohn * Me.GeleisteteStunden
End Sub

An dieser Stelle ist es aber noch verkehrt, weil er trotz Endlosformular bei allen Datensätzen die gleichen Zahlen raushaut...

Ideen?

DF6GL

#4
Hallo,

das ist normal..

Füge die Dlookup()-Funktion in ein leeres Feld (Spalte) im Abfrageentwurf ein und binde das Form-Textfeld an diesen Spaltennamen.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

xoius

Hallo und vielen Dank,

das hat für den einen Fall funktioniert. Allerdings wird die Zahl nicht als Währung formatiert ausgegeben. Kann ich das noch irgendwie anpassen?

Meine Lösung bisher:
ExternerStundenlohn: DomWert("ExternerStundenlohn";"tblPositionen";"PosProdukteID=" & [KostenproduktID] & " AND Position=" & [Vertragsposition])

Was noch nicht funktioniert ist das hier. Ich habe es über eine Abfrage versucht, um nur zwei Parameter zu haben...da kommt nix

InternerStundenlohn: DomWert("StundensatzIntern";"qerPassenderStundensatzProMitarbeiter";"StundensatzMitarbeiterID=" & [KostenMitarbeiterID] & " AND GeleistetWann<=" & [GeleistetWann])

...und einmal direkt mit vielen Parametern, wobei er über die letzten beiden Klammern meckert und so oder so nichts liefert.

Dazu noch Tipps?  :D

=DomWert("[StundensatzIntern]";"tblStundensatz";"[StundensatzMitarbeiterID]=" & [KostenMitarbeiterID] & " AND (([GiltVon]<=" & [GeleistetWann] & " AND [GiltAktuell]=True) OR ([GiltVon]<=" & [GeleistetWann] & " AND ([GiltBis]>=" & [GeleistetWann])))



DF6GL

Hallo,

wozu brauchst Du in Tabellen-/Abfrageansicht das Währungssymbol?

Dazu müsste der gesamte Ausdruck entsprechend formatiert und damit in einen String umgewandelt werden
oder die Format-Eigenschaft der entspr. Abfragespalte auf z. B. "Währung" gesetzt werden.


Eine Datum-Variable für ein SQL-Kriterium muss in das USA- oder ISO-Format umgewandelt werden.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

xoius

Ich brauche es nicht unbedingt in der Abfrage, aber im Textfeld wird es mir auch nur als Zahl ausgespuckt, egal ob ich es als Währung formatiere. Das sieht dann nicht so gut aus.

DF6GL

Hallo,

auch das Textfeld hat eine Format-Eigenschaft.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

xoius

Das war das, was ich meinte: Die Abfrage spuckt ne Zahl aus, das Textfeld ist als Währung formatiert, ausgegeben wird trotzdem nur die Zahl.

Dringlicher ist das Problem oben mit dem DomWert bei dem ich mehr als zwei Kriterien habe und nicht nur and sondern auch nen oder... dazu ne Idee?

DF6GL

Hallo,

kannst du bei der Format-Eigenschaft des Textfeldes "Währung" auswählen?

Zitat
mehr als zwei Kriterien

--die Vergleichsfelder müssen als Steuerelemente im Formular vorhanden sein.

-- Datumsfelder müssen mit der Formatfunktion in das USA- oder ISO-Format konvertiert werden.
-- Statt "Or" könnte "between ... and ..." verwendet werden.  Das würde die "And vor Or"-Hierarchie  und damit nötige logische Klammerung außen vor lassen.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access