Protokoll - Code-Fehler
02.10.2015 12:34:25
Imran
ich habe diese Frage schon in einem meiner Threads gestellt, allerdings wird dies langsam zu unübersichtlich dort. Außerdem ist es ein anderer Fehler, als im Thread besprochen wurde.
Ich habe mir einen Protokollierungs Code schreiben lassen, der es mir ermöglicht, Änderungen zu protokollieren.
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ErsteFreieZeile As Long
Dim AlterWert As Variant, NeuerWert As Variant
Dim rngNeuSel As Range
If Sh.Name = "Protokoll" Then Exit Sub
If Intersect(Target, Sh.Range("A1:AN2000")) Is Nothing Then Exit Sub
'Ereignisbehandlung ausschalten:
Application.EnableEvents = False
'Zwischenspeichern des neuen Wertes und der neuen Zellmarkierung
NeuerWert = Target.Value
Set rngNeuSel = Selection
'Rückgängigmachen der letzten Aktion (=Zellwertänderung und Zellmarkierung):
Application.Undo '
Allerdings treten einige Probleme auf. An sich funktioniert der Code, doch anscheinend stört er anderweitig das arbeiten.Fehler 1: Wenn ich manuell eine neue Zeile einfügen will, kommt der "Laufzeitfehler '424': Objekt erforderlich." Wenn ich es beende, statt zu Debuggen, kann ich aber eine Zeile einfügen. beim Debuggen werde ich auf den angegebenen Code geleitet und er markiert mir "AlterWert=Target.Value".
Fehler 2: Ich habe einen Code, der mir einen neuen Eintrag automatisch setzt.
Code:
Option Explicit
Sub Main()
Dim lngLastRow As Long
Dim strTMP As String
Dim i As Long
On Error GoTo Fin
With Tabelle1
lngLastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
For i = lngLastRow To 1 Step -1
If InStr(1, .Cells(i, 2), "(") 0 Then Exit For
Next i
i = i + 1
.Rows(i).Insert
lngLastRow = i - 1
strTMP = Split(Split(.Cells(lngLastRow, 2).Value, "(")(1), ")")(0)
If Left(strTMP, 2) = "00" Then
strTMP = "00" & strTMP + 1
ElseIf Left(strTMP, 1) = 0 Then
strTMP = "0" & strTMP + 1
Else
strTMP = strTMP + 1
End If
If Len(strTMP) > 3 Then strTMP = Right(strTMP, 3)
.Cells(lngLastRow + 1, 2).Value = "(" & strTMP & ")_ "
Application.Goto .Cells(lngLastRow + 1, 2), True
SendKeys "{F2}"
End With
Fin:
If Err.Number 0 Then MsgBox "Error: " & _
Err.Number & " " & Err.Description
End Sub
Hier bekomme ich den "Laufzeitfehler '1004': Die Methode 'Undo' für das Objekt '_Application' ist fehlgeschlagen. Auch das kann ich beenden, und das Makro wieder ganz normal ausführen. Beim debuggen werd ich auf den Protokollierungs-Code geleitet und mir wird "Application.Undo" markiert.
Fehler 3: Ich kann keine Zeilen löschen ! Nach dem Löschen, tauchen sie einfach wieder auf ! Ich habe gelesen, das liegt an der Undo Zeile. Aber das darf ja so nicht passieren !
Ich weiß, das sind sehr viele Fragen auf einmal ! Aber trotzdem hoffe ich, dass ihr mir helfen könnt !
Danke :)