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