HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv

Beiträge zum Thread: Fehlersuche Datenverlust

emkaes
25.04.2026 00:44:29
Fehlersuche Datenverlust
Onur
25.04.2026 04:36:40
AW: Fehlersuche Datenverlust
Alwin Weisangler
25.04.2026 11:21:08
AW: Fehlersuche Datenverlust
Alwin Weisangler
25.04.2026 11:49:22
AW: Fehlersuche Datenverlust
Firmus
25.04.2026 23:28:30
AW: Fehlersuche Datenverlust
snb
26.04.2026 11:34:19
AW: Fehlersuche Datenverlust
snb
26.04.2026 11:49:22
AW: Fehlersuche Datenverlust
Emkaes
29.04.2026 14:31:37
AW: Fehlersuche Datenverlust
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Excel gut - VBA gut
emkaes
25.04.2026 00:44:29
Fehlersuche Datenverlust
Hallo Profis,

seit Dezember 2025 läuft ein Microsoft Surface im Dauerbetrieb in einem Vereinsheim. Eintragungen sind nur über Steuerelemente (ActiveX) möglich, da eine Tastatur nicht gewollt ist.
Das funzt soweit fast einwandfrei. Ab und wann werden bei Tabellenwechsel die Steuerelemente nicht gezeichnet, auch Workarounds zum Neuaufbau der Tabelle wie zoomen beim Sheet_Change_event etc verhindern das nicht zuverlässig, das ist aber nicht das Problem.

Die Eintragungen werden sowohl in der Exceldatei in einer intelligenten Tabelle als auch ( zur Sicherheit ) in einer LogDatei als csv abgelegt.

das soll über nachfolgenden Code erfolgen


Sub buchungen(strA As String, strB As String, strC As String, intNum As Integer)

Dim tbl As ListObject
Dim Spalte As Long, dblP As Double

Spalte = 1
Dim zeile As Long
Dim rng As Range
Dim filepath As String, csvLine As String, logFile As Integer

If InStr(1, strC, "0,33") > 0 Then
dblP = 1
ElseIf InStr(1, strC, "0,5") > 0 Then
dblP = 1.25
Else
dblP = 0.75
End If


'Tabelle einlesen
With Tabelle3
Set tbl = .ListObjects(1)

'Zeile hinzufügen
tbl.ListRows.Add

'Zeile definieren
zeile = tbl.DataBodyRange.Rows.Count

With tbl.DataBodyRange
.Cells(zeile, 1).Value = zeile
.Cells(zeile, 2).Value = Date
.Cells(zeile, 3).Value = strA
.Cells(zeile, 4).Value = strB
.Cells(zeile, 5).Value = strC
.Cells(zeile, 6).Value = intNum
.Cells(zeile, 7).Value = dblP
.Cells(zeile, 8).Value = intNum * dblP
End With
End With

' Logfile (CSV-Datei) als Backup ergänzen
filepath = "C:\Users\Logfile.csv"

' CSV-Zeile vorbereiten
csvLine = Date & ";" & strA & ";" & strB & ";" & strC & ";" & intNum * dblP
' CSV-Datei öffnen und neue Zeile anfügen
logFile = FreeFile
Open filepath For Append As logFile
Print #logFile, csvLine
Close logFile

End Sub


Jetzt musste ich leider feststellen, dass mir im Listobject der Tabelle3 ca 500 Datensätze fehlen. Insgesamt sind in der csv-Datei 1217 Einträge, das Listobject hat lediglich 729 Einträge.

Eine mögliche Ursache kann natürlich sein, dass das logFile für jeden Eintrag geöffnet und geschlossen wird, während die ExcelDatei geöffnet bleibt. Hier auch nach jedem Eintrag zu speichern ließe sich ja relativ einfach bewerkstelligen.

Habt ihr für den geschilderten Datenverlust hinsichtlich ListObject oder Microsoft Surface ggfs. irgendwelche Erkenntnisse?

Vielen Dank für eure Bemühungen

emkaes


Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Excel gut - VBA gut
Onur
25.04.2026 04:36:40
AW: Fehlersuche Datenverlust
Schwer, ohne die Datei....
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Excel gut - VBA gut
Alwin Weisangler
25.04.2026 11:21:08
AW: Fehlersuche Datenverlust
Hallo emkaes,

da ist am Code erst mal nichts was so ein Problem verusachen könnte.
Aber aus der Ferne 2 Gedanken.
1. Gedanke: es wurde in Tabelle 3 nachträglich händisch gelöscht.
2. Gedanke: Es enstehen aus einer anderen Ecke deines Projektes doppelte Aufrufe dieser Prozedur.
Der 2. Gedanke hätte aber auch zur Folge, dass dann händisch aus der Tabelle3 der jeweilige doppelte Eintrag entfernt wurde.

Anbei mal noch ein Gedanke/Änderung zum Schreiben in eine neue Zeile via Array in einen Rutsch.


Sub buchungen(strA As String, strB As String, strC As String, intNum As Integer)

Dim tbl As ListObject
Dim dblP As Double, arr()
Dim filepath As String, csvLine As String, logFile As Integer

If InStr(1, strC, "0,33") > 0 Then
dblP = 1
ElseIf InStr(1, strC, "0,5") > 0 Then
dblP = 1.25
Else
dblP = 0.75
End If

'Tabelle einlesen
With Tabelle3
Set tbl = .ListObjects(1)
arr = Array(tbl.DataBodyRange.Rows.Count, Date, strA, strB, strC, intNum, dblP, intNum * dblP)
tbl.ListRows.Add.Range.Resize(1, 8) = arr
End With

' Logfile (CSV-Datei) als Backup ergänzen
filepath = "C:\Users\Logfile.csv"

' CSV-Zeile vorbereiten
csvLine = Date & ";" & strA & ";" & strB & ";" & strC & ";" & intNum * dblP
' CSV-Datei öffnen und neue Zeile anfügen
logFile = FreeFile
Open filepath For Append As logFile
Print #logFile, csvLine
Close logFile

End Sub


Gruß Uwe

Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Excel gut - VBA gut
Alwin Weisangler
25.04.2026 11:49:22
AW: Fehlersuche Datenverlust
da hatte ich noch den Fall leeres Listobjekt übersehen.
korrigiert so:


Sub buchungen(strA As String, strB As String, strC As String, intNum As Integer)

Dim tbl As ListObject
Dim dblP As Double, arr(), iz&
Dim filepath As String, csvLine As String, logFile As Integer

If InStr(1, strC, "0,33") > 0 Then
dblP = 1
ElseIf InStr(1, strC, "0,5") > 0 Then
dblP = 1.25
Else
dblP = 0.75
End If
'Tabelle einlesen
Set tbl = Tabelle3.ListObjects(1)
iz = 1
If Not tbl.DataBodyRange Is Nothing Then iz = tbl.DataBodyRange.Rows.Count + 1
arr = Array(iz, Date, strA, strB, strC, intNum, dblP, intNum * dblP)
tbl.ListRows.Add.Range.Resize(1, 8) = arr

' Logfile (CSV-Datei) als Backup ergänzen
filepath = "C:\Users\Logfile.csv"

' CSV-Zeile vorbereiten
csvLine = Date & ";" & strA & ";" & strB & ";" & strC & ";" & intNum * dblP
' CSV-Datei öffnen und neue Zeile anfügen
logFile = FreeFile
Open filepath For Append As logFile
Print #logFile, csvLine
Close logFile

End Sub


Gruß Uwe
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Excel gut - VBA gut
Firmus
25.04.2026 23:28:30
AW: Fehlersuche Datenverlust
Hi Emkaes,

1. aus deinem Codefragment geht nicht hervor, ob die xls-Datei jedesmal mit "Close-save" beendet wird - oder zwischendurch nur mit "close".
Wie Onur: ohne Datei schlecht näheres zu sagen.

2. a) Bedient immer die gleiche Person die Anwendung, oder bedienen mehrere Personen die Anwendung?
b) Befindet sich die xls-datei lokal auf einem Rechner - oder in einem shared Bereich, und wird von unterschiedlichen Rechnern/Leuten genutzt?
c) Bei unterschiedlichen Rechner: Gibt es genau eine Version des Programms - für alle?

3. Versuche doch über die Analyse "Welche Datensätze fehlen?" - vllt. ein bestimmtes Muster zu erkennen:
immer die gleiche Person?
immer die gleichen strA oder strB oder strC, ...... usw.

Viel Erfolg,
Firmus
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Excel gut - VBA gut
snb
26.04.2026 11:34:19
AW: Fehlersuche Datenverlust
Ich würde VBA bevorzügen:

Sub M_snb()

M_snb_001 "A", "B", "CC0.5CC", 20
End Sub


Sub M_snb_001(strA As String, strB As String, strC As String, intNum As Integer)

y = 0.75 - 0.25 * (InStr(1, strC, "0.33") > 0) - 0.5 * (InStr(1, strC, "0.5") > 0)
sn = Array(1, Date, strA, strB, strC, intNum, y, intNum * y)

Sheet1.ListObjects(1).ListRows.Add.Range = sn

Open "C:\Users\Logfile.csv" For Append As #1
Print #1, Join(sn, ",")
Close #1
End Sub

Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Excel gut - VBA gut
snb
26.04.2026 11:49:22
AW: Fehlersuche Datenverlust
Du verwendest Variabele 'Spalte' nicht. 'Zeile' in Spalte A ist völlig überflüssig.
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Excel gut - VBA gut
Emkaes
29.04.2026 14:31:37
AW: Fehlersuche Datenverlust
Hi,

vielen Dank für eure Anregungen, bin leider aktuell zeitlich eingeschränkt.

Abgespeckte Datei dann ggfs in neuem thread

Viele grüsse

Emkaes