Hallo liebe Community
Ich hoffe ihr könnt mir weiterhelfen. Zuerst, ich hab keine Ahnung von VBA und Makros. Ich hab mir den Code für mein Excel-Programm aus diversen Codes aus dem Internet zusammengebastelt und zu meinem Glück hat es bis jetzt funktioniert und zwar auch so wie ich es wollte. Jetzt jedoch, steh ich vor einem Problem aus dem ich nicht mehr rauskomme -> kein Wunder war nur mehr eine Frage der Zeit, wenn ich keine Ahnung von der Materie habe *g*
Einführung: Ich habe einen Überstundenrechner gestaltet. Bei diesem Rechner trage ich in einer Spalte die Startzeit ein und bei der Nächsten die Endzeit. (Grob gesagt). Über Makros hab ich mir die Möglichkeit geschaffen, die Zeiten nicht immer mit Doppelpunkt eingeben zu müssen. Ich schreib daher die zahl 1000 und es kommt dann 10:00 raus. Das funktioniert auch alles noch einwandfrei. Ich konnte mit dem "Alten Code" auch 0000 eingeben und er gibt mir 00:00 aus. Beim "Neuen Code" jedoch, haut es mir den im Betreff genannten Fehler raus, wenn ich 0000 eingebe. 0001 und aufwärts geht ohne Probleme nur bei 0000 gibt's den Fehler.
Das is der "Neue Code"
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim RaBereich1 As Range, RaBereich2 As Range, RaZelle As Range, Bereich As Range
Dim InS As Integer
Dim InM As Integer
' Bereich der Wirksamkeit
Set RaBereich1 = Range("E4:F4 , J4:M4 , E8:F22 , J8:M22 , E31:F45 , J31:M45 , E54:F68 , J54:M68 , E77:F91 , J77:M91 , E100:F114 , J100:M114 , E123:F137 , J123:M137")
Set RaBereich2 = Range("E146:F160 , J146:M160 , E169:F183 , J169:M183 , E192:F206 , J192:M206 , E215:F229 , J215:M229 , E238:F252 , J238:M252 , E261:F275 , J261:M275")
Set Bereich = Union(RaBereich1, RaBereich2)
For Each RaZelle In Range(Target.Address)
If Not Intersect(RaZelle, Bereich) Is Nothing Then
With RaZelle
If .Value <> "" Then
If IsNumeric(.Value) And InStr(.Value, ":") = 0 And _
InStr(.Value, ",") = 0 Then
.NumberFormat = "[hh]:mm"
If Len(Target.Value) > 2 Then
InS = Left(.Value, Len(.Value) - 2)
InM = Right(.Value, 2)
Else
' Stunden haben das Primat
' InS = .Value
' InM = 0
' Minuten haben das Primat
InS = 0
InM = .Value
End If
.Value = InS & ":" & InM
End If
End If
End With
End If
Next RaZelle
End Sub
Den Fehler zeigt er mir in der Zeile " .NumberFormat = "[hh]:mm"" an.
Der "Alte Code" zum Vergleich
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim RaBereich As Range, RaZelle As Range
Dim InS As Integer
Dim InM As Integer
' Bereich der Wirksamkeit
Set RaBereich = Range("E4:F275 , J4:M275")
For Each RaZelle In Range(Target.Address)
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
With RaZelle
If .Value <> "" Then
If IsNumeric(.Value) And InStr(.Value, ":") = 0 And _
InStr(.Value, ",") = 0 Then
.NumberFormat = "[hh]:mm"
If Len(Target.Value) > 2 Then
InS = Left(.Value, Len(.Value) - 2)
InM = Right(.Value, 2)
Else
' Stunden haben das Primat
' InS = .Value
' InM = 0
' Minuten haben das Primat
InS = 0
InM = .Value
End If
.Value = InS & ":" & InM
End If
End If
End With
End If
Next RaZelle
End Sub
Es hat sich zwischen den Zwein einfach nur die Erweiterung der Bereiche geändert. Wie gesagt, die Bereich werden alle erkannt und die Makros arbeiten auch bei allen Eingaben wie 1200 usw, außer eben wenn ich 0000 eingebe. Dann gibt's den Fehler.
Ich hoff es kann mir Jemand weiterhelfen. Vielen Dank schonmal im Voraus
lg Stefan |