Herbers Excel-Forum - das Archiv
Problem mit Makro zum protokollieren v. Änderungen

|
Betrifft: Problem mit Makro zum protokollieren v. Änderungen
von: Scotty
Geschrieben am: 19.11.2003 11:19:42
Hallo...
Hatte schonmal gepostet. Habe immer noch Probleme mit folgenden Makro:
Möchte Änderungen aus einer Excel-Tab protokollieren. Habe dazu folgendes Makro:
Quelldatei und Protokolldatei stehen in einer Arbeitsmappe.
Option Explicit
Public InhaltAlt, ZeilProt
'Die beiden ersten stehen in der Quelldatei in der geändert wird
'bei Ansteuerung einer Zelle wird deren Wert in InhaltAlt gespeichert
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
InhaltAlt = Target.Value
End Sub
'hier wird der Rest erledigt und in eine Tabelle Protokoll geschrieben
Private Sub worksheet_change(ByVal Target As Range)
Dim ZeileText, SpalteText, InhaltNeu, Benutzer As String, DatZeit
InhaltNeu = Target.Value
ZeileText = Cells(Target.Row, 1)
SpalteText = Cells(1, Target.Column)
Benutzer = UserName()
DatZeit = Date + Time
Worksheets("Protokoll").Cells(ZeilProt, 1).Value = ZeileText
Worksheets("Protokoll").Cells(ZeilProt, 4).Value = SpalteText
Worksheets("Protokoll").Cells(ZeilProt, 5).Value = InhaltAlt
Worksheets("Protokoll").Cells(ZeilProt, 6).Value = InhaltNeu
Worksheets("Protokoll").Cells(ZeilProt, 7).Value = Benutzer
Worksheets("Protokoll").Cells(ZeilProt, 8).Value = DatZeit
ZeilProt = ZeilProt + 1
End Sub
'Diese steht im Modulblatt der Arbeitsmappe
'damit wird die akt Zeilenzahl in Protokoll festgestellt
Sub auto_open()
ZeilProt = Worksheets("Protokoll").Range("A1").CurrentRegion.Rows.Count + 1
End Sub
Zum einen meckert er bei der Zeile "Benutzer = UserName()" Meldung:Function nicht deklariert. Habe das auf "Benutzer = Application.UserName geändert. Es wird nicht mehr gemeckert, nur bei der Zeile "Worksheets("Protokoll").Cells(ZeilProt, 1).Value = ZeileText" bleibt das Makro mit der Meldung: Anwendungs- oder objektdefinierter Fehler stehen.
Was mache ich falsch??
Danke für eure Hilfe
Scotty
Betrifft: AW: Problem mit Makro zum protokollieren v. Änderungen
von: Nayus
Geschrieben am: 19.11.2003 13:46:20
Hi,
wie gestern schon gepostet, funktioniert Dein Code bei mir wie gewünscht.
Bitte prüfen:
1. Der Code steht an der richtigen Stelle
2. Es existiert ein Blatt mit dem Namen "Protokoll"
3. Der Code zur Protokollierung steht NICHT im Blatt "Protokoll"
4. Die Mappe wurde gespeichert und einmal geschlossen
-> funktioniert erst ab dem ersten Öffnen
Gruß,
Nayus
'Code in einem neuen Modul
Public InhaltAlt, ZeilProt
Sub auto_open()
ZeilProt = Worksheets("Protokoll").Range("A1").CurrentRegion.Rows.Count + 1
End Sub
'Code in dem Blatt, dessen Änderungen Protokolliert werden sollen
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
InhaltAlt = Target.Value
End Sub
Private Sub worksheet_change(ByVal Target As Range)
Dim ZeileText, SpalteText, InhaltNeu, Benutzer As String, DatZeit
InhaltNeu = Target.Value
ZeileText = Cells(Target.Row, 1)
SpalteText = Cells(1, Target.Column)
Benutzer = Application.UserName
DatZeit = Date + Time
Worksheets("Protokoll").Cells(ZeilProt, 1).Value = ZeileText
Worksheets("Protokoll").Cells(ZeilProt, 4).Value = SpalteText
Worksheets("Protokoll").Cells(ZeilProt, 5).Value = InhaltAlt
Worksheets("Protokoll").Cells(ZeilProt, 6).Value = InhaltNeu
Worksheets("Protokoll").Cells(ZeilProt, 7).Value = Benutzer
Worksheets("Protokoll").Cells(ZeilProt, 8).Value = DatZeit
ZeilProt = ZeilProt + 1
End Sub
Betrifft: Funktioniert jetzt teilweise
von: Scotty
Geschrieben am: 19.11.2003 14:38:37
Hi...
jetzt funktioniert es teilweise. Mußte aber auch ZeilProt noch feklarieren. Vorher hat das Makro überhaupt nix gemacht. Das Problem was ich jetzt noch habe, wenn ich mehrere Dinge ändere, steht nur in der ersten Zeile des Protokolls etwas. Würde mir wünschen und hätte gedacht (weil Makro soll ja ausgefüllte Zellen ermitteln) das alle Änderungen in der Tab protokolliert werden. Verstehst du mein Problem? Am besten wäre es, wenn dasteht, Zelle A1 wurde von... zu ... geändert, Zelle B5 von... zu... usw. Geht das irgendwie. Sorry wenn ich nerve, und vielen Dank, das du mir hilfst!!
Scotty
Betrifft: AW: Funktioniert jetzt teilweise
von: Nayus
Geschrieben am: 19.11.2003 15:56:18
Hi,
ich hab' mal den Code aus Deinem Auto_Open Makro verlagert und eine neue globale Variable angelegt.
Bei jeder Änderung in Deinem Quellsheet wird jetzt eine neue Zeile im Blatt
"Protokoll" angelegt.
Spalte A = Zelladresse
Spalte B = alter Wert
Spalte C = neuer Wert
Spalte D = User
Spalte E = Datum/Uhrzeit der Änderung
Ich hoffe es ist jetzt so, wie Du es brauchst.
Gruß,
Nayus
'Globale Deklarationen
Option Explicit
Public InhaltAlt As Variant, ZeilProt As Variant, ZellAddress As String
'Code im Sheet
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
InhaltAlt = Target.Value
ZellAddress = Target.Address(False, False, xlA1)
End Sub
Private Sub worksheet_change(ByVal Target As Range)
Dim ZeileText, SpalteText, InhaltNeu, Benutzer As String, DatZeit
'verlagert aus Auto_Open
ZeilProt = Worksheets("Protokoll").Range("A1").CurrentRegion.Rows.Count + 1
InhaltNeu = Target.Value
ZeileText = Cells(Target.Row, 1)
SpalteText = Cells(1, Target.Column)
Benutzer = Application.UserName
DatZeit = Date + Time
Worksheets("Protokoll").Cells(ZeilProt, 1).Value = ZellAddress
Worksheets("Protokoll").Cells(ZeilProt, 2).Value = InhaltAlt
Worksheets("Protokoll").Cells(ZeilProt, 3).Value = InhaltNeu
Worksheets("Protokoll").Cells(ZeilProt, 4).Value = Benutzer
Worksheets("Protokoll").Cells(ZeilProt, 5).Value = DatZeit
ZeilProt = ZeilProt + 1
End Sub
Betrifft: Das war genau richtig,nur noch ne Kleinigkeit wäre
von: Scotty
Geschrieben am: 20.11.2003 08:29:52
Dein Makro war richtig spitzenklasse. Es haut jetzt soweit alles hin. Das einzige was noch nicht geht, das die Zelladresse angezeigt wird.
Aber auf jeden Fall hast du mir gutgehend weitergeholfen. Danke dir!!!!
Gruß Scotty
Betrifft: 1. Problem hat sich geklärt!
von: Scotty
Geschrieben am: 20.11.2003 11:29:36
.
Betrifft: Mir ist nochwas aufgefallen
von: Scotty
Geschrieben am: 20.11.2003 09:52:39
Wenn meine Tab. über Spalte E hinaus Text hat gibt es ein kleines Prob. Wenn ich in Spalte F oder I usw. etwas schreibe, wird es im Protokoll aufgeführt. Wenn ich hingegen aus der Zelle was lösche, wird im Protokoll zwar aufgeführt, das etwas gemacht wurde, nur leider wird nicht mehr aufgeführt, was vorher in der Zelle gestanden hat. Man weiß also nicht, was vorher in der Zelle gestanden hat.
Hast du da eventuell auch noch ne gute Idee??
Besten Dank
Scotty