Logfile mitschreiben in VBA

10/12/2007 - 06:48 von Walter Kerelitsch | Report spam
Hi folks,
ich bin wieder mal am Ende meiner Künste...

Ich suche eine Möglichkeit, Excel als Protokollierer einzusetzen. Wenn
bestimmte Datenfelder durch den Benutzer geàndert werden, soll an einem
freien Platz der alte (oder neue) Inhalt der Felder sequentiell
protokolliert werden. Danach soll der User wie gewohnt fortsetzen können.

So weit bin ich bisher:

Private Sub Worksheet_selectionchange(ByVal Target As Range)
If ActiveCell.Address = "$E$1" Then 'die Zelle,
die protokolliert werden muss
Selection.Copy
' alter Wert in die Zwischenablage
Range("A20").Select ' Zielbereich
suchen
ActiveSheet.Paste '
und reinpasten
Range("E2").Select ' wieder
zurückmarschieren
End If

Jetzt komm ich aber in eine (logische) Endlosschleife:
Der VBA-Code selbst löst mir ja mein Ereignis aus, sodass ich nie auf das
Feld E1 hinkomme.

Gibt es eine Möglichkeit, in VBA Ereignisse programmgesteuert zu
deaktivieren oder hat jemand einen besseren Tipp (zB ein besser geeignetes
Ereignis)?

Und wo ich sicher auch schwitzen werde:
Wie stelle ich komfortabel fest, WO der nàchste Datensatz anzuhàngen ist
(kann ja nicht immer A20 sein, sonst wàrs ja kein Protokollfile...)

Vielen Dank im Voraus
Walter
 

Lesen sie die antworten

#1 Alexander Wolff
10/12/2007 - 08:33 | Warnen spam
Mein Tipp: in D2 den Wert von F2 mitführend hineinschreiben

Dann bei Änderung von E2 beide (E2:F2) zusammen wegloggen
Danach F2 den neuen Wert von E2 zuweisen (VBA, nicht mittels â)

In A1:C1 schreibe Zeit, neu, alt

Private Sub Worksheet_Change(ByVal Target As Range)
'Hier den zu überwachenden Bereich anpassen:
Set Target = Application.Intersect(Target, Range("E2"))
'Wenn nicht innerhalb des Bereiches, wird die Prozedur verlassen:
If Target Is Nothing Then Exit Sub
'Ereignisse ausschalten, um das Change-Ereignis nicht erneut
auszulösen:
Application.EnableEvents = False
'nach letzter Zeile Logg-Punkt setzen
A = Range("A1").CurrentRegion.Rows.Count + 1
'Loggen
Cells(A, 2).Value = Range("E2").Value
Cells(A, 3).Value = Range("F2").Value
Cells(A, 1) = Now()
'nàchsten "Alt-Wert" in D2 notieren
Range("F2").Value = Range("E2").Value
'Ereignisse wieder einschalten:
Application.EnableEvents = True
End Sub
Moin+Gruss Alexander - MVP für MS Excel - www.xxcl.de - mso2000sp3 --7-2

Ähnliche fragen