Verbrauchsberechnung - Summierung/Mittelwert über mehrere DAtensätze abhängig vom Inhalt eines Hatensatzes

Werbung:
Hallo
Ja stimmt Vollladung hat tatsächlich drei L :-)

Da ich noch immer einen Fehlermeldung (siehe Screenshot) bekomme und zwar
Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt

habe ich nochmals die Variablennamen und die Eigenschaften der Zahlen kontrolliert
In der Tabelle T_Elektroauto
  • Ladung ist Double
  • km-Stand ist Double (sinnvoller wäre hier möglicherweise Long Integer)

In der Tabelle T-Durchschnitte
  • Gesamt_Ladung ist Double
  • Gesamt_km its Double
  • Durchschnitt_kWh_pro_100km ist Double

im Script
  • Dim kWh_Summe As Double
  • Dim km_Diff As Double
  • Dim km_Start As Double
Das sollte allso passen. Wobei alle hier als Double deklarierten Variablen könnten auch als SIngle definiert werden (und dann natülich auch soin der Tabelle)

Wenn ich folgende Zeilen auskommentiere (Hinweis in der MS
'Set db = Nothing
'Set rs = Nothing
'Set rsd = Nothing
dann funktioniert es einmal. Bei einem erneuten Start des Scripts kommt wieder oben angeführte fehlermeldung
Wenn ich die daten in der Tabelle T_Durschschnitte lösche und diese zeilen wieder aktivieren undn dann das Script ausführe funktioniert es wieder einmal.

Grüße
Markus
 

Anhänge

  • Auto_Test.zip
    Auto_Test.zip
    56,3 KB · Aufrufe: 1
  • Fehlermeldung_VBA2.webp
    Fehlermeldung_VBA2.webp
    6,9 KB · Aufrufe: 1
  • Fehlermeldung_VBA.webp
    Fehlermeldung_VBA.webp
    9,4 KB · Aufrufe: 1
Werbung:
Die Fehlermeldung sagt lediglich, das zu dem Zeitpunkt des .Addnew das Objekt (Recordset) "rsd" noch nicht deklariert wurde. D.h., zur Laufzeit wurde die Zeile "Set rsd = db.OpenRecordset("T_Durchschnitte")" noch nicht durchlaufen, in der das Recordset initialisiert wird.

Die Zeilen mit = Nothing räumen nur am Schluss wieder auf. Die vorher mit "set" initialisierten Objekte werden wieder freigegeben.
Dass es funktioniert, wenn Du die Nothing-Zeilen auskommentierst ist logisch, weil dann die Objekte zwischen zwei Aufrufen "weiter leben".
Was aber unsauber ist.

Es liegt also wahrscheinlich daran, auf welche Art Du die Sub "erzeugen_Durchschnittstabelle()" aufrufst.
Wenn Du es direkt in der VBA-IDE machst, muss der Curser in der Zeile "Sub erzeugen_D...." stehen, wenn Du F5 drückst oder den grünen Pfeil anklickst.
Am besten startest Du die Prozedur über einen Button in einem Formular, bei dem im Klick-Ereignis des Buttons (Ereignisprozedur on_Click) der Aufruf erfolgt.
Code:
Private Sub Meinbutton_Click()
 erzeugen_Durchschnittstabelle
End Sub

Mein Vorschlag um solche Fehler zu erkennen solltest Du Dich mit dem Thema "Lebensdauer und Gültigkeitsraum" von Objekten, Variablen und anderm "flüchtigen Zeug" beschäftigen. Überhaupt ist es sinnvoll sich mit Klassen, Objekten mal intensiver auseinander zu setzen.
 
Zuletzt bearbeitet:
Zurück
Oben