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
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.

