Hallo Werner und Reinhard,
Public Cn As New ADODB.Connection 'Verbindung zur
Datenbank
Public RsT As New ADODB.Recordset 'Verbindung zur
Datenbank
Public RsT2 As New ADODB.Recordset 'Verbindung zur
Datenbank
Dim Feld As Variant
Soweit korrekt!
Meldung = „SELECT * FROM Lokalsystem“
Warum ?
If LSZähler = 0 Then GoTo TRA 'beendet Routine, falls die
Datenbank schon leer ist
Goto Befehle sollte man tühnlichst unterlassen, da sie nur Probleme mit sich bringen! Und warum fragst du Nicht mit if not(LSZähler) ab? Ist schneller 
LSZähler = 0
Wieso den LSZähler auf 0 setzen ?
With RsT2
.ActiveConnection = Cn
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Source = Meldung & " ORDER BY Datensatz"
.Open
.MoveFirst
End With
Warum bei Source =Meldung & " ORDER BY DATENSATZ" ?
Warum machst du es nicht wiefolgt ?
–> .Source = „SELECT * FROM Lokalsystem ORDER BY Datensatz;“
Du hast geschrieben das du nur spezielle Datensätze brauchst. Warum selektierst du hier sie nicht gleich ? Das kannst du via SQL mit der WHERE Klausel machen 
Meldung = „SELECT * FROM Datenbank“
Siehe oben 
SL = 0
'Siehe auch oben 
With RsT
.ActiveConnection = Cn
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Source = Meldung & " ORDER BY Datensatz"
.Open
.MoveFirst
End With
Auch hier wieder bei Source, Warum? Sind nur unnötige Zeilen. Den SQL Syntax sollte man sich schon in einer Variablen zusammenbasteln und dann nur die Variable zuweisen. Aber das macht man nur, wenn die SQL Statements sehr lang sind und nicht bei solchen kurzen 
Desweiteren werden SQL Statements immer mit einem ; abgeschlossen 
'--------------------------
With RsT2
Do While Not .EOF
ErrNr = 0
RsT.AddNew
For Each Feld In .Fields
RsT.Fields(Feld.Name).Value = .Fields(Feld.Name).Value
Next Feld
Was ist wenn ein Wert von einem Feld den Wert ‚Null‘ hat?
Auch dann wird dir hier das programm abschmieren 
An dieser Stelle würde ich das noch überprüfen!
RsT.Update
'Fehlerroutine bei doppelter Punktnummer
ErrNr = Err.Number
Wieso Err.Number=0 wenn keine Fehlerbehandlung mit On Error… eingeschalten ist? Tritt ein Fehler auf, so steigt dein program eh aus
-(.
Ein kleiner Tipp bei der Erstellung voin Datenbanken. Man macht immer ein Feld mit dem Typ AUTO_INCREMENT rein. Nenne das Feld einfach IDx. Bei jeden Datensatz den du nun anlegst, wird ein Der Wert in dem Feld IDx um 1 erhöht(Einfügen der Datensätze via SQL!). Dies bedeutet wiederrum das du jeder Datensatz definitiv nur einmal vorhanden ist!
Bsp.
Du hast eine Tabelle mit 2 Feldern. Sagen wir mal Nachname und Vorname.
Es stehen dort 3 Datensätze drinnen. Sagen wir mal
DS1 : Max Muster
DS2: Hans Müller
DS3: Max Muster
Nun versuche mal den 1 DS ( Max Muster ) zu löschen! Dann siehst du das es nicht gehen wird!
If ErrNr = -2147467259 Then X = 0
Warum fragst du nicht gleich Err.Number ab? Hier verschwendest du wieder sinnlos eine Variable!
.MoveNext
Loop
End With
Warum kein Doevents ? Bei einer DB die etliche Millionen Datensätze hat, koennte es passieren das Dein rechner abschmiert oder für Minuten lahm gelegt ist! Erstelle dazu eine Variable und lasse sie hochzaehlen. Ein Doevents bei jeden Durchlauf waere übertrieben!
Aber da kannst du dann zum bsp. ganz einfach mit Variable Mod 100 abfragen 
'--------------------------
RsT.Close
RsT2.Close
SL = 0
Was hat das SL zu bedeuten? Du hast sie noch nicht verwendet!
Wie du siehst Werner, ist der Code sehr Störanfaellig!
Ich kann mich noch erinnern, das du mir mal geschrieben hast, das dir 3 zeilen Code zuviel sind. Warum machst du es dir dann so schwer und nimmst nicht den Rat anderer an?
Dein Vorhaben , kann man mit etlichen Zeilen weniger realisieren und ist auch 3mal sicherer
Das Stichwort hier heisst SQL!
Ist nicht böse gemeint, mein Statement 
MfG Alex