Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Verzwickte Berechnung in VBA





Frage

Ich sitze vor einem schwierigem Problem: Ich habe ein Vielzahl von Datentabellen, welche immer aus den Spalten Bezeichnung, Einheit und Wert bestehen. In diesen Tabellen befinden sich zum Teil hunderte von Einträgen. Es gibt eine weitere Tabelle, die vom Benutzer gefüllt wird "tblEingabedaten". Diese wird über ein Formular gefüllt. In diesem Formular gibt es in einer Zeile drei Felder "Bezeichnung", "Einheit", "Wert". Zudem gibt es ein Kombinationsfeld, über welches es er die Tabelle auswählt, mit der er rechnen möchte (eine der vielen Datentabellen s.o.). Von diesen Eingabezeilen gibt es mehrere. Beispiel: Ein Formular mit 5 Zeilen a 3 (4) Feldern. Nun soll, je nachdem, welche Datentabelle ausgewählt wurde, der erste Eingabewert mit den Werten der ausgewählten Datentabelle multipliziert werden. Die Ergebnisse (Produkte) sollen in eine dritte Tabelle "tblErgebnisse" geschrieben werden mit der Bezeichnung, Einheit aus der zugrundeliegenden Datentabelle. Beispiel: Bezeichnung Einheit Wert Kombifeld Benzin kg 1000 Benzin in Verbrennungsmotor Diesel kg 500 Diesel in Verbrennungsmotor Die Tabellen, die mit dem Kombifeld ausgewählt werden enthalten Werte zu Schadstoffemissionen der jeweiligen Verbrennungsprozesse. Nun sollen alle Werte aus der Tabelle "Benzin in Verbrennungsmotor" mit 1000 und alle aus "Diesel in Verbrennungsmotor" mit 500 multipliziert werden. Die Ergebnisse sollen in die Tabelle "tblErgebnisse" geschrieben werden und zwar in die Spalten 1-3 die Bezeichnung, Einheit und Ergebnisse aus "Benzin in Verbrennungsmotor" und in Spalte 4-6 die aus "Benzin in Verbrennungsmotor". Falls das ganze nicht geht, dass die Ergebnisse Spaltenweise eingetragen werden, wäre auch eine Lösung denkbar, die die Ergebnisse immer in neue, automatisch generierte Tabellen einträgt? (Bsp.: "tblErgebnisBenzin", ...) Ich möchte das ganze nicht über Abfragen lösen. sondern VBA. Ich habe dazu folgenden Code, welcher aber nicht dynamisch ist. Er wählt nur eine bestimmte Datentabelle aus. Kann mir jemand sagen, wie ich das abändern kann so, dass je nach Kombifeldauswahl die richtige Datentabelle angesprochen wird? Vielen Dank für die Hilfe. Markus Hier nun der erwähnte Code: Sub Multipliy() DoCmd.RunSQL "DELETE * FROM Ergebnisse;" Dim db As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim rsResult As DAO.Recordset Set db = CurrentDb Set rs1 = db.OpenRecordset("Benzin", dbOpenSnapshot) Set rs2 = db.OpenRecordset("Eingabedaten", dbOpenSnapshot) Set rsResult = db.OpenRecordset("Ergebnisse", dbOpenDynaset) Do While Not rs1.EOF Do While Not rs2.EOF rsResult.AddNew rsResult("Bezeichnung") = rs1("Bezeichnung") rsResult("Einheit") = rs1("Einheit") rsResult("Wert") = rs1("Wert") * rs2("Wert") rsResult.Update rs2.MoveNext Loop rs2.MoveFirst rs1.MoveNext Loop rsResult.Close rs2.Close rs1.Close Set rsResult = Nothing Set rs2 = Nothing Set rs1 = Nothing Set db = Nothing End Sub

Antwort 1 von struppi

Hallo,
Du hast es doch eigentlich schon!
Brauchst doch nur die Namen in OpenRecordset als Variable übergeben.
Zb so:
Dim Tabelle1 as string
Tabelle1 = "Benzin"
'oder
Tabelle1 = Me.kombifeldname.value
'oder
Tabelle1 = me.kombifeldname.column(2,me.kombifeldname.listindex)
'wenn man ein anderen Eintrag aus dem Kombifeld haben will als den "gbundenen"

und dann:
Set rs1 = db.OpenRecordset(Tabelle1, dbOpenSnapshot)

oder verstehe ich das falsch?
gruß struppi



Antwort 2 von china

ich danke Dir, werds gleich mal ausprobieren.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: