Anzeige
Archiv - Navigation
1320to1324
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
Inhaltsverzeichnis

Keine Änderungshistorie bei Eingabe über Userform

Keine Änderungshistorie bei Eingabe über Userform
15.07.2013 15:09:19
bolleeee
Hallo,
ich benötige bitte ein bisschen Hilfe. Ich füge Daten mithilfe einer Userform in eine Tabelle ein.
Ich habe ein Extra-Tabellenblatt mit einer Änderungshistorie gefunden. Leider nimmt es die Änderungen, die von der Userform eingetragen werden nicht an. Wenn ich manuell in der Tabelle etwas ändere, funktioniert es tadellos.
Hier ist der Code zur Aufzeichnung der Änderungen in das Blatt "Protokoll":
Private Sub Worksheet_Change(ByVal Target As Range)
Dim vNew As Variant, vOld As Variant
Dim iRow As Integer
If Intersect(Target, Range("A2:BB20000")) Is Nothing Then Exit Sub
vNew = Target.Value
Application.EnableEvents = False
On Error GoTo ERRORHANDLER
Application.Undo
vOld = Target.Value
Target.Value = vNew
With Worksheets("Protokoll")
Worksheets("Protokoll").Unprotect ""
iRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(iRow, 1).Value = Target.Address(False, False)
.Cells(iRow, 2).Value = vOld
.Cells(iRow, 3).Value = vNew
.Cells(iRow, 4).Value = Date
.Cells(iRow, 5).Value = Time
.Cells(iRow, 6).Value = UserName
End With
ERRORHANDLER:
Application.EnableEvents = True
Worksheets("Protokoll").Protect ""
End Sub
Woran liegt das?
Vielen Dank und Gruß
Bolleeee

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Keine Änderungshistorie bei Eingabe über Userform
15.07.2013 16:19:23
Hajo_Zi
das Change Ereignis wirkt nur bei Eingabe.
Schreibe das Protokoll doch in der UserForm fort.

AW: Keine Änderungshistorie bei Eingabe über Userform
16.07.2013 08:11:45
bolleeee
Hallo,
danke für die schnelle Antwort. Mit meinen begrenzten VBA-Kenntnissen verstehe ich allerdings ich nicht , was du mit "in der Userform fortschreiben" meinst.
Gruß
Bolleeee

Keine Änderungshistorie bei Eingabe über Userform
16.07.2013 09:27:56
Hajo_Zi
diesen Teil
   vNew = Target.Value
Application.EnableEvents = False
On Error GoTo ERRORHANDLER
Application.Undo
vOld = Target.Value
Target.Value = vNew
With Worksheets("Protokoll")
Worksheets("Protokoll").Unprotect ""
iRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(iRow, 1).Value = Target.Address(False, False)
.Cells(iRow, 2).Value = vOld
.Cells(iRow, 3).Value = vNew
.Cells(iRow, 4).Value = Date
.Cells(iRow, 5).Value = Time
.Cells(iRow, 6).Value = UserName
End With
ERRORHANDLER:
Application.EnableEvents = True
Worksheets("Protokoll").Protect ""
Du musst aber Target durch Deine Zelladresse ersetzen.
Gruß Hajo

Anzeige
AW: Keine Änderungshistorie bei Eingabe über Userform
16.07.2013 10:24:42
bolleeee
Das verstehe ich nicht. Um eine Zelladresse einzugeben müsste ich doch wissen, in welcher Zelle (welchen Zellen) Änderungen gemacht werden, oder? Habe es auch mal mit Range probiert, aber da kommt auch nichts Sinnvolles heraus.
Ich habe jetzt mal eine Beispieldatei (https://www.herber.de/bbs/user/86388.xlsm) angehängt, in der Hoffnung, dass du mir dort direkt zeigen kannst, wie das gemeint ist.
Danke und Gruß
Bolleeee

Keine Änderungshistorie bei Eingabe Userform
16.07.2013 10:59:04
Hajo_Zi
man sollte an den Link keine Zeichen anfügen, damit er auch als Link zu erkennen ist.
Warum sollte ich eine Datei runterladen, mit der ich nichts anfangen kann. Es Stand nicht was ich in der Datei machen soll, um Dein Problem zu simulieren.
Ich glaube im ersten Beitrag Stand was von ich schreibe mit der UserForm Daten in die Tabelle und es wird das Protokoll nicht fortgeführt. Wenn Dir die Adresse nicht bekannt ist wie schreibst Du dann was in die Tabelle?
Gruß Hajo

Anzeige
AW: Keine Änderungshistorie bei Eingabe Userform
16.07.2013 11:56:22
bolleeee
Sorry, dass ich nicht noch einmal auf mein Anliegen verwiesen habe...
Deswegen noch einmal vielleicht noch einmal zur Verdeutlichung:
Wenn ich etwas direkt in der Tabelle verändere - egal wo - dann wird das entsprechend in "Protokoll" festgehalten. Die Eingabe soll normalerweise aber nur über die Userform erfolgen.
Wenn ich über die Textboxes in der Userform Daten eingebe, werden diese Änderungen aber nicht festgehalten.
Die Textboxes sind mit der Tabelle einzeln verknüpft (z.B. Textbox1 schreibt in Zelle A1). Würde dem Protokoll-Code jetzt die Adresse von bspw. der Textbox1 zugeordnet, dann wird doch ignoriert, wenn in der Textbox1 keine Änderung gemacht wird, aber vllt. in der Textbox2.
Ich möchte eigentlich jede Änderung festhalten (auch wenn jemand ohne die Userform in der Tabelle etwas ändert).

Anzeige
AW: Keine Änderungshistorie bei Eingabe Userform
16.07.2013 12:07:24
Rudi
Hallo,
ganz einfach:
Private Sub CommandButton1_Click()
Dim z As Integer
z = Range("A65565").End(xlUp).Row + 1
Cells(z, 1) = TextBox1
Cells(z, 2) = TextBox2
Cells(z, 3) = TextBox3
With Sheets("Protokoll")
With .Cells(Rows.Count, 1).End(xlUp).Offset(1)
.Offset(, 0) = TextBox1
.Offset(, 1) = TextBox2
.Offset(, 2) = TextBox3
.Offset(, 3) = Date
.Offset(, 4) = Time
End With
End With
Unload Me
End Sub

Gruß
Rudi

AW: Keine Änderungshistorie bei Eingabe Userform
16.07.2013 12:38:05
bolleeee
Hallo Rudi,
es funktioniert. Vielen Dank. Es ist bei meinen insgesamt 50 Textboxes zugegeben etwas aufwendiger als ich gehofft hatte, aber Hauptsache ist, dass es klappt!
Vielen Dank auf jeden Fall!
Gruß
Bolleeee

Anzeige
AW: Keine Änderungshistorie bei Eingabe über Userform
16.07.2013 11:16:01
fcs
Hallo Bolle,
die Undo-Funktion funktioniert vom Userform-Code aus leider nicht.
Man muss hier die Änderung der Zellinhalte etwas anders verfolgen.
Der Code in deinem Userform muss dann wie folgt aussehen.
Wenn du über das Userform Zahlenwerte oder Datumswerte in die Tabelle eintragen willst, dann müssen die Text-Inhalte der Textboxen mit den Conversionsfunktionen in ein passendes Format umgewandelt werden bevor sie in die Tabelle eingetragen werden. Siehe auskommentierte Beispiele im Code.
Die Inhalte stehen sonst ggf. als Text in den Zellen.
Noch ein Hinweis: Variablen für Tabellenzeilen sollten als Long deklariert werden, nicht als Integer.
Bei Tabellen im neuen (Excel 2007 und neuer) ateiformat haben mehr Zeilen als mit Intervariablen angesprochen werden können.
Gruß
Franz
Private Sub CommandButton1_Click()
Dim z As Long
z = Range("A65565").End(xlUp).Row + 1
With ActiveSheet
Call prcProtokoll(rngZelle:=.Cells(z, 1), vNew:=Me.TextBox1) 'Text
Call prcProtokoll(rngZelle:=.Cells(z, 2), vNew:=Me.TextBox2) 'Text
Call prcProtokoll(rngZelle:=.Cells(z, 3), vNew:=Me.TextBox3) 'Text
'    Call prcProtokoll(rngZelle:=.Cells(z, 2), vNew:=CDbl(Me.TextBox2)) 'Zahlinhalt
'    Call prcProtokoll(rngZelle:=.Cells(z, 3), vNew:=CDate(Me.TextBox3)) 'Datum
End With
Unload Me
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub prcProtokoll(rngZelle As Range, ByVal vNew As Variant)
Dim iRow As Long
Dim vOld As Variant
If Intersect(rngZelle, rngZelle.Parent.Range("A2:BB20000")) Is Nothing Then Exit Sub
'    Username = VBA.Environ("username")  'nicht unbedingt erforderlich wenn Public-Variable  _
schon gefüllt.
Application.ScreenUpdating = False
Application.EnableEvents = False
vOld = rngZelle.Value    'alten Wert in Zelle merken
rngZelle.Value = vNew    'neuen Wert in Zelle schreiben
vNew = rngZelle.Value    'neuen Wert wieder aus Zelle lesen (Excel macht manchmal eigenstä _
ndige Wertkonversionen)
If vOld  vNew Then     'alten und neuen Wert vergleichen
With Worksheets("Protokoll")
.Unprotect ""
iRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(iRow, 1).Value = rngZelle.Address(False, False)
.Cells(iRow, 2).Value = vOld
.Cells(iRow, 3).Value = vNew
.Cells(iRow, 4).Value = Date
.Cells(iRow, 5).Value = Time
.Cells(iRow, 6).Value = UserName
.Protect ""
End With
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

Anzeige

270 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige