AW: Hallo und...
21.06.2019 19:08:11
Daniel
Sorry,aber mitdenken ist beim Programmieren ziemlich wichtig.
und wenn du gleich als allerersten Befehl Target.Numberformat = "General" ausführen lässt, bevor du e nachgeprüft hast, in welche Zellen überhaupt was eingegeben wurde, dann ist doch klar, warum in deiner Vertragsnummer der über die Formatierung angezeigte Text immer verschwindet.
dh erst prüfen, ob eine Datumszelle eingegeben wurde, DANN erst Zahlenformat auf General setzen.
dann musst du auch nicht in den anderen Zellen das Zahlenformat wieder einstellen und kannst den unteren Teil des Codes komplett weglassen.
der Code sollte eigentlich auch mit aktiviertem Blattschutz laufen, da du ja so nur Zellen bearbeitest die nicht gesperrt sind, damit sollte es keine Probleme geben, du musst halt beim aktivieren des Blattschutzes erlauben, das nicht gesperrte Zellen formatiert werden dürfen.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MekZellSt As String
Dim Zelle As Range
If Intersect(Target, Range("R34,V34,R50,V50,Y68")) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Zelle In Intersect(Target, Range("R34,V34,R50,V50,Y68"))
Zelle.NumberFormat = "General"
If Len(Zelle) = 5 Then
Zelle = _
CDate(Format(CDate(Mid(Zelle, 1, 1) & "." & _
Mid(Zelle, 2, 2) & "." & _
Mid(Zelle, 4, 2)), "dd.mm.yyyy"))
ElseIf Len(Zelle) = 6 Then
Zelle = _
CDate(Format(CDate(Mid(Zelle, 1, 2) & "." & _
Mid(Zelle, 3, 2) & "." & _
Mid(Zelle, 5, 2)), "dd.mm.yyyy"))
ElseIf Len(Zelle) = 7 Then
Zelle = _
CDate(Format(CDate(Mid(Zelle, 1, 1) & "." & _
Mid(Zelle, 2, 2) & "." & _
Mid(Zelle, 4, 4)), "dd.mm.yyyy"))
ElseIf Len(Zelle) = 8 Then
Zelle = _
CDate(Format(CDate(Mid(Zelle, 1, 2) & "." & _
Mid(Zelle, 3, 2) & "." & _
Mid(Zelle, 5, 4)), "dd.mm.yyyy"))
End If
Next
Application.EnableEvents = True
End Sub
das SelectionChange-Event brauchst dann auch nicht mehr, da die Zellen jetzt ihre Zahlenformate behalten.
wenn du jedoch die Formate über den Blattschutz absichern willst, dann musst du im Code den Schutz aufheben mit
Me.Unprotect "xxx"
und am schluss wieder setzten
Me.Protect "xxx"
Gruß Daniel