Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
748to752
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
748to752
748to752
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Protokolleintrag bei fehlendem Datensatz

Protokolleintrag bei fehlendem Datensatz
29.03.2006 20:37:15
reiner
Hallo Leute,
beim Einlesen von neuen Datensätzen in eine Exceldatei überprüft das steuernde Makro die Datensätze auf Vollzähligkeit. Wird ein fehlender Datensatz erkannt, erscheint eine MsgBox mit dem Datum und der Uhrzeit des fehlenden Eintrags. Es kommt gelegentlich vor dass bei den bis zu 3000 Datensätzen mehr als ein Datensatz als fehlend erkannt und gemeldet wird.
Ich will dass die relevanten Daten unmittelbar nach der Meldung in der MsgBox in eine Protokolldatei untereinander geschrieben werden. Mit einem Call-Aufruf wird der Eintrag in die Protokolldatei vorgenommen; gleich danach wird die Exceldatei weiterhin überprüft.
Mit dem nachfolgenden Code ist die Fehlerdokumentation im Prinzip auch möglich; das Problem besteht aber derzeit darin dass der dokumentierte fehlende Datensatz mit dem nachfolgenden überschrieben wird. Unabhängig von der Anzahl der Fehler wird immer nur der zuletzt gemeldete Fehler dokumentiert, alle vorigen wurden bereits überschrieben.
Set fs = CreateObject("Scripting.FileSystemObject")
Set Logdatei = fs.CreateTextFile("c:\Protokoll.log", True)
Logdatei.Write (" Datensatz: """ & DatumAktZeile & """;""" & Stunde & ":" & MinuteAktZeile & """" & " fehlt!!!")
Logdatei.Close
Wie müsste dieser Code abgeändert werden damit die Datensätze untereinander gelistet werden? Wie lassen sich anstelle der Fehlerdokumentation in der externen „Protokoll.log“-Datei die Fehler in einem neu erstellten Tabellenblatt der gleichen Mappe zeilenweise dokumentieren?
mfg
Reiner

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Protokolleintrag bei fehlendem Datensatz
29.03.2006 20:50:46
Ramses
Hallo
Probiers mal so ohne FSO
Open "c:\Protokoll.log" For Append As #1
Write #1, " Datensatz: """ & DatumAktZeile & """;""" & Stunde & ":" & MinuteAktZeile & """" & " fehlt!!!"
Close #1
Gruss Rainer
AW: Protokolleintrag bei fehlendem Datensatz
29.03.2006 22:12:08
reiner
Hallo Rainer,
die Fehlerprotokollierung nach Deinem Vorschlag klappt wunderbar; ist allerdings die zweitbeste Lösung.
Ist es sehr aufwendig die Fehlerprotokollierung in einem Tabellenblatt der gleichen Arbeitsmappe vorzunehmen? Das wäre dann die optimale Lösung!
mfg
Reiner
AW: Protokolleintrag bei fehlendem Datensatz
29.03.2006 22:45:07
Yal
Hallo Rainer,
füge eine zusätzliche Spalte ein, schreibe drin eine Funktion, die die Vollständigkeit prüft
=ODER(Datum="";Stunde="";Minute="") ~f~
und sortiere nach diese Spalte. Die fehlerhafte Datensätze werden nach Wünsch am Ende oder am Anfang der Tabelle "sortiert".
Soll die originale Reihenfolge anschleissend wiederehrgestellt, muss vorher eine 2. Zusatzspalte mit der Formel ~f~ =ZEILE() , dann kopiert und über sich selbst als Werte eingefügt werden. Am Ende mit "Sortierung" nach dem originale Zeilennummer sortieren.
Diese kann natürlich sehr schön mit Makros automatisiert werden.
Yal
Anzeige
AW: Protokolleintrag bei fehlendem Datensatz
29.03.2006 23:30:01
reiner
Hallo Yal,
bitte lies nochmals meine Anfrage; ich benötige keine Funktion, die die Vollständigkeit prüft. Die Überprüfung funktioniert einwandfrei, darum geht es auch nicht. Die bei der Überprüfung gefundenen Fehler werden in einer MsgBox aufgelistet und in einer Protokolldatei gespeichert.
Ramses hatte einen guten Verbesserungsvorschlag für den bereits vorhandenen Programmcode unterbreitet. Das funktioniert alles bestens.
Optimal wäre es natürlich wenn die Protokollierung in einem separaten Tabellenblatt der gleichen Arbeitsmappe erfolgen könnte; es geht lediglich um die Frage, wie lassen sich die Fehlermeldungen anhand der o.g. Variablen in ein Tabellenblatt einfügen?
Reiner
Anzeige
AW: Protokolleintrag bei fehlendem Datensatz
29.03.2006 23:38:21
Ramses
Hallo
"..ist allerdings die zweitbeste Lösung...."
Ich habe nur deinen Vorschlag und deine Frage kommentiert
"...wie lassen sich die Fehlermeldungen anhand der o.g. Variablen in ein Tabellenblatt einfüge.."
Wenn jemand mit dem FSO arbeitet, gehe ich davon aus dass er die Basics beherrscht.
Worksheets("Protokoll-Tabelle").Cells(cells(rows.count,1).end(xlup).row+1,1) = " Datensatz: """ & DatumAktZeile & """;""" & Stunde & ":" & MinuteAktZeile & """" & " fehlt!!!"
Gruss Rainer
AW: Protokolleintrag bei fehlendem Datensatz
30.03.2006 13:43:01
reiner
Hallo Rainer,
vielen Dank für den Vorschlag zum Einfügen der Fehlermeldungen in Worksheets("Protokoll-Tabelle").
Könnte es sein dass dieser Programmcode noch einen Fehler enthält? Es wird nämlich keine Fehlermeldung in das Worksheets("Protokoll-Tabelle") eingetragen.
Meine ursprüngliche Version mit FSO entstammt einem VBA-Hilfetext und der anschließenden Testphase.
Reiner
Anzeige
AW: Protokolleintrag bei fehlendem Datensatz
30.03.2006 18:47:04
Ramses
Hallo
Da musst du schon den ganzen Code zeigen
Hellsehen kann ich nicht
Gruss Rainer
AW: Protokolleintrag bei fehlendem Datensatz
30.03.2006 18:50:21
reiner
Hallo Rainer,
Fehler inzwischen gefunden, - alles klar funktioniert wunderbar; jetzt noch eine abschließende Frage: lässt es sich einfach realisieren die Textteile „DATENSATZ:“ , „DATUM“ , „STUNDE und MINUTE“ in jeweils eine separate Spalte einzufügen?
Reiner
AW: Protokolleintrag bei fehlendem Datensatz
30.03.2006 19:01:05
Ramses
Hallo
"...lässt es sich einfach realisieren..."
Klar :-)
Dim lastR as Integer
With Workhsheets("Protokoll-Tabelle")
lastR = .Cells(cells(rows.count,1).end(xlup).row+1,1)
.Cells(lastR,1) = DatumAktZeile
.Cells(lastR,2) = Stunde
.Cells(lastR,3) = MinuteAktZeile
'usw.
End With
Gruss Rainer
Anzeige
AW: Protokolleintrag bei fehlendem Datensatz
30.03.2006 20:50:29
reiner
Hallo Rainer,
bei der spaltenweisen Darstellung gibt es noch ein Problem.
Wenn ich im Makro einen Haltepunkt bei der nachfolgenden Zeile setze, müsste bei darübergeschobenem Mauszeiger über „lastR“ m.E. eine Zeilennummer sichtbar werden. Es erscheint aber nur: „lastR = leer“
lastR = .Cells(cells(rows.count,1).end(xlup).row+1,1)
Es wird auch nichts in die Spalten eingetragen. Woran könnte das liegen?
reiner
AW: Protokolleintrag bei fehlendem Datensatz
30.03.2006 21:19:58
Ramses
Hallo
Da fehlen zwei Punkte :-)
lastR = .Cells(.cells(.rows.count,1).end(xlup).row+1,1)
Sorry
Gruss Rainer
AW: Protokolleintrag bei fehlendem Datensatz
30.03.2006 22:11:40
reiner
Hallo Rainer,
ich habe die Korrektur übernommen, es ändert sich aber dadurch nichts am Ergebnis.
(Ich habe die Variablennamen ein wenig vereinfacht)
Hier nochmals die beiden Versionen: 1. Einträge zeilenweise ohne Berücksichtigung der Spalten
2. Einträge mit Berücksichtigung der Spalten:
1.)Sheets("Protokoll-Tabelle").Select
Sheets("Protokoll-Tabelle").Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1) _
= "Datensatz: " & Datum & "; " & Stunde & ":" & Minute & "" & " Uhr fehlt" & _
"; " & Date & "; " & Time
2.)With Worksheets("Protokoll-Tabelle")
lastR = .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1)
.Cells(lastR, 1) = Datum
.Cells(lastR, 2) = Stunde
.Cells(lastR, 3) = Minute
.Cells(lastR, 4) = Date
.Cells(lastR, 5) = Time
End With
Wenn die erste Fehlermeldung einen Eintrag unter Version1.) in der 2. Zeile veranlasst, müsste im weiteren Verlauf der Makrobearbeitung die Version unter 2.) der gleiche Eintrag unter Berücksichtigung der Spalten in Zeile 3 veranlasst werden, leider geschieht das nicht - es passiert gar nichts
Was könnte nun noch die Fehlerursache sein?
Reiner
Anzeige
AW: Protokolleintrag bei fehlendem Datensatz
30.03.2006 22:26:33
Ramses
Hallo
Das ist getestet und funktioniert :-)
Option Explicit

Sub test()
    Dim lastR As Integer
    Dim Datum As Date, Stunde As Integer, minute As Integer
    Datum = Date
    Stunde = 22
    minute = 12
    With Worksheets("Protokoll-Tabelle")
        lastR = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        .Cells(lastR, 1) = Datum
        .Cells(lastR, 2) = Stunde
        .Cells(lastR, 3) = minute
        .Cells(lastR, 4) = Date
        .Cells(lastR, 5) = Time
    End With
End Sub


Gruss Rainer
Anzeige
vielen Dank
30.03.2006 23:32:37
reiner
Hallo Rainer,
jetzt werden die Fehlermeldungen in („Protokoll-Tabelle“) genau so dargestellt wie ich es mir vorgestellt habe.
Danke für die optimale Unterstützung
Reiner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige