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.