1.3k Aufrufe
Gefragt in Tabellenkalkulation von marc_k Einsteiger_in (49 Punkte)
Hallo Leute,

ich habe ein problem mit dem unten folgenden Makro in Excel:
Das Makro sorgt dafür das ich Uhrzeiten ohne Doppelpunkt eingeben kann, was auch soweit funktioniert.
Das Problem ist wie folgt, wenn die Zellformate in Standard formatiert sind und ich eine falsche Uhrzeit eingebe z.B. 2500 (25:00 Uhr) kommt das Fenster "Falsche Eingabe" aber wenn die Zellformate in "hh:mm" formatiert, was das Makro ja nach einer richtigen Eingabe selber macht, und ich in die Zelle erneut eine Zeit eingben will und diese falsch ist kommt nicht die Fehlermeldung sondern es wird in die Zelle 00:00 geschrieben.

Wie muss ich das Makro ändern, damit ich die Fehler Meldung bekomme?

Habe mir vielleicht gedacht am Amfang des Makros zu sagen das es die Zelle in Standard (General) formatieren soll, aber komme nicht dahinter wie ich den mache.

Habe leider nicht fast keine Ahnung von VBA und bei Google habe ich leider auch nichts gefunden, womit ich was anfangen konnte. :-(

Das Makro ist wie folgt:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Count > 1 Then Exit Sub
Dim RaBereich As Range ' Bereich der Wirksamkeit
Dim RaZelle As Range ' zur Zeit untersuchte Zelle
Dim InS As Integer ' Variable für Stunde
Dim InM As Integer ' Variable für Minute
Set RaBereich = Range("F7:F31, G7:G31, I7:I31") ' Bereich der Wirksamkeit festlegem
' noch mehr Bereiche
' Set RaBereich = Union(Range("h7:h31"), Range("L7:R26"), Range("U7:AA26"), Range("AD7:AJ26"))
ActiveSheet.Unprotect "Passwort" ' Schutz der Tabelle aufheben
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If RaBereich Is Nothing Then Exit Sub
Application.EnableEvents = False ' Reaktion auf Zellveränderung abschalten
For Each RaZelle In RaBereich ' Schleife falls mehr als eine Zelle mit einmal verändert
With RaZelle
If .Value <> "" Then
If IsNumeric(.Value) And InStr(.Value, ":") = 0 And _
InStr(.Value, ",") = 0 And Len(RaZelle) < 5 Then
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
' überprüfen ob Eingabe in ein Datum umgewandelt werden kann
If IsDate(InS & ":" & InM) Then
.NumberFormat = "hh:mm" ' Zellformat setzen
.Value = InS & ":" & InM ' Zeit in Zelle schreiben
ElseIf InStr(.Text, ":") = 0 Then
MsgBox "Falsche Eingabe"
Target = ""
End If
ElseIf InStr(.Text, ":") = 0 Then
MsgBox "Falsche Eingabe"
Target = ""
End If
End If
End With
Next RaZelle
ActiveSheet.Protect "Passwort" ' Schutz der Tabelle aufheben
Application.EnableEvents = True ' Reaktion auf Zellveränderung einschalten
End Sub

Hoffe das mir einer helfen kann und schon mal besten dank im voraus.

Gruss Marc_K.

2 Antworten

0 Punkte
Beantwortet von
Hi,

Versuche es mal an folgender Stelle:

Application.EnableEvents = False ' Reaktion auf Zellveränderung abschalten
For Each RaZelle In RaBereich ' Schleife falls mehr als eine Zelle mit einmal verändert
With RaZelle
.NumberFormat = "General" ' StandardFormat einstellen
If .Value <> "" Then
If IsNumeric(.Value) And InStr(.Value, ":") = 0 And _
InStr(.Value, ",") = 0 And Len(RaZelle) < 5 Then


bye
malSchauen
0 Punkte
Beantwortet von marc_k Einsteiger_in (49 Punkte)
Hallo malSchauen,

ich danke dir, so funktioniert es besten. :-)
Vielen dank für die schnelle antwort.

Gruss
Marc_K.
...