Makro arbeitet nicht bei Blattschutz
18.09.2003 23:51:48
Tekiela
Ich habe mir eine Arbeitszeitberechnung für eine Woche gebaut und möchte über die Eingabe der Start- und Endzeiten meine Wochenarbeitszeit erfassen.
Das funktioniert auch einwandfrei.
Da der Mensch ja faul ist, möchte ich diese Zeiten nicht mit dem lästigen Klammergriff für den Doppelunkt in der Uhrzeit eingeben. Dafür habe ich ein Makro gefunden, das mir den Doppelpunkt automatisch einfügt.
Das geht auch wunderbar, solange wie ich nicht das Blatt schütze. Das wäre aber sehr gut, damit mir meine nich so versierten Kollegen nicht dauernd die Formeln zerschiessen, aber dann funktioniert das Makro nicht mehr. Anstatt der Uhrzeit (zum Beispiel Blattschutz aktiviert, Eingabe 10:00 erhalte ich die Fehlermeldung: Laufzeitfehler 1004 Die NumberFormateigenschaft des RangeObjektes kann nicht festgelegt werden! ...und dann kann ich debuggen oden beenden anklicken)Wähle ich davon was, wird aus meiner schönen 10:00 Uhr ein 240:00!Ich habe leider keine VisualBasic-Kenntnisse und kann den Fehler nicht
selbst beheben.
Vielleicht könnt Ihr mir ja helfen?
Zur Erläuterung:
In den Zellen B11,c11, g11, h11, i11, m11, q11 und r11
trage ich die Zeiten ein.
Da es für viele Mitarbeiter gemacht wird, geht der Zeilenbereich bis
bis B367 .. .. .. .. .. .. r367
Hier das Makro dazu:
Oben steht dann "Worksheet" und "Change"
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s%, m%, xpos
If Target.Column < 0 Or Target.Column > 19 Then Exit Sub
' Auslesen der aktuellen Position (Spalte und Zeile)
xSpalte = "" & Target.Column
'Hier umsetzen der Spaltenzahlen ( 2 = B, 3 = C etc.)
Select Case xSpalte
Case 2, 3, 7, 8, 12, 13, 17, 18
xSpalte = Target.Column
xZeile = Target.Row
Case Else
'Rauswerfen wenn andere als o.a. Zeilen
Exit Sub
End Select
'Prüfen ob die ZelenZahl im Bereich 11 - 376 liegt
If xZeile >= 11 And xZeile <= 367 Then
xZeile = Target.Row
Else
'Wenn nicht dann
Exit Sub
End If
With Cells(Target.Row, Target.Column)
If .Value = "" Then Exit Sub
If IsNumeric(.Value) And InStr(.Value, ":") = 0 And InStr(.Value, ",") = 0 Then
.NumberFormat = "[hh]:mm"
If Len(.Value) > 2 Then
s = Left(.Value, Len(.Value) - 2)
m = Right(.Value, 2)
Else
s = .Value
m = 0
End If
.Value = s & ":" & m
End If
End With
End Sub
Für eine brauchbare Lösung würde ich dem Helfer auch die Füße k.....naja Ihr wißt schon.
Vielen Dank im Voraus
Tekiela LLiebscher@t-online.de