Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
340to344
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
340to344
340to344
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Problem mit Makro zum protokollieren v. Änderungen

Problem mit Makro zum protokollieren v. Änderungen
19.11.2003 11:19:42
Scotty
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

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit Makro zum protokollieren v. Änderungen
19.11.2003 13:46:20
Nayus
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

Anzeige
Funktioniert jetzt teilweise
19.11.2003 14:38:37
Scotty
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
Anzeige
AW: Funktioniert jetzt teilweise
19.11.2003 15:56:18
Nayus
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

Anzeige
Das war genau richtig,nur noch ne Kleinigkeit wäre
20.11.2003 08:29:52
Scotty
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
1. Problem hat sich geklärt!
20.11.2003 11:29:36
Scotty
.
Mir ist nochwas aufgefallen
20.11.2003 09:52:39
Scotty
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige