Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Fehlersuche Datenverlust

Forumthread: Fehlersuche Datenverlust

Fehlersuche Datenverlust
25.04.2026 02:44:29
emkaes
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


Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlersuche Datenverlust
25.04.2026 06:36:40
Onur
Schwer, ohne die Datei....
AW: Fehlersuche Datenverlust
25.04.2026 13:21:08
Alwin Weisangler
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

Anzeige
AW: Fehlersuche Datenverlust
26.04.2026 01:28:30
Firmus
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
Anzeige
AW: Fehlersuche Datenverlust
26.04.2026 13:34:19
snb
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

Anzeige
AW: Fehlersuche Datenverlust
26.04.2026 13:49:22
snb
Du verwendest Variabele 'Spalte' nicht. 'Zeile' in Spalte A ist völlig überflüssig.
AW: Fehlersuche Datenverlust
29.04.2026 16:31:37
Emkaes
Hi,

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

Abgespeckte Datei dann ggfs in neuem thread

Viele grüsse

Emkaes
AW: Fehlersuche Datenverlust
25.04.2026 13:49:22
Alwin Weisangler
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
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18