Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
492to496
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
492to496
492to496
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Über den Nummernblock sollen Zeiten ohne Doppelpun

Über den Nummernblock sollen Zeiten ohne Doppelpun
05.10.2004 09:34:38
Selma
Hallo Leute,
ich habe mir im Internet ein Makro gefunden, bei dem es möglich ist Uhrzeit ohne Doppelpunkt einzugeben.
Das Makro bezieht sich auf Spalte A und E. Mein Bereich ist B3:AF5.
Was muss ich ändern, damit das Makro nur für Bereich B3:AF5 gilt?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim s%, m%
'Soll nur bei einer Eingabe in Spalte A wirksam werden:
If Target.Column <> 1 Then Exit Sub
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

Danke im Voraus....
Gruß
Selma

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Über den Nummernblock sollen Zeiten ohne Doppe
05.10.2004 09:37:38
Matthias
Hallo Selma,
so geht's:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim s%, m%
'Soll nur bei einer Eingabe in Spalte A wirksam werden:
If Not Intersect(Target, Range("B3:AF5")) Is Nothing Then
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 If
End Sub

Gruß Matthias
Anzeige
AW: Über den Nummernblock sollen Zeiten ohne Doppe
Boris
Hi Matthias,
markier mal B2:B3 und gib dann ne Uhrzeit ein...;-)
Daher würd ich vorher noch schalten:
If Target.Count &gt 1 Then Exit Sub
Grüße Boris
AW: Über den Nummernblock sollen Zeiten ohne Doppe
05.10.2004 09:47:29
Matthias
Hallo Boris,
ich hab zwar nichts besonderes gefunden, was passiert, aber du hast sicher recht.
noch besser wäre vielleicht:
Dim z as Range
(...)
For Each z In Target
If Not Intersect(z, Range("B3:AF5")) Is Nothing Then
With z
(...)
End With
End If
Next
Grüße,
Matthias
Dann markier mal 10 ganze Spalten...
Boris
Hi Matthias,
...und schau morgen mal wieder auf deinem Rechner vorbei ;-)
Wenn du B2:B3 markierst und dann ne Uhrzeit eingibst, dann liefert in deinem ersten Beispiel Intersect eine Übereinstimmung - und die aktive Zelle - also B2 - wird auch mit Uhrzeit formatiert. Soll aber nicht...
Grüße Boris
Anzeige
AW: Dann markier mal 10 ganze Spalten...
05.10.2004 09:56:23
Matthias
Hallo Boris,
ich hab versehentlich die Zellen B3:B4 markiert, deshalb hab ich den Fehler nicht erkannt.
Mit der ewig langen Berechnung hast du recht - ich bin ja auch noch am lernen. :-)
Was hältst Du nun also davon?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim s%, m%
Dim z As Range
Dim t As Range
'Soll nur bei einer Eingabe in Spalte A wirksam werden:
Set t = Intersect(Target, Range("B3:AF5"))
If Not t Is Nothing Then
For Each z In t
With z
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
Next
End If
End Sub

Grüße,
Matthias
Anzeige
AW: Dann markier mal 10 ganze Spalten...
05.10.2004 09:56:54
Selma
Hallo Matthais und Boris,
jetzt verstehe ich nichts!
Wie sieht das Makro jetzt aus?
Gruß
Selma
AW: Dann markier mal 10 ganze Spalten...
05.10.2004 10:05:29
Matthias
Hallo Selma,
versuch mal das auch meinem Beitrag von 9:56.
Ich hoffe, Boris prüft es nochmal auf Fehler und überlange Berechnungszeiten, ich glaube aber es klappt so.
Es wird zwar meist nicht benötigt, aber so werden alle markierten Zellen bearbeitet.
(Man kann einen Inhalt in mehrere Zellen gleichzeitig schreiben, wenn man einen Bereich markiert und die Eingabe mit Strg-Enter abschließt.)
Grüße Matthias
AW: Dann markier mal 10 ganze Spalten...
Boris
Hi Selma,
einfach der erste Code von Matthias - ergänzt um meine Bemerkung:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim s%, m%
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B3:AF5")) Is Nothing Then
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 If
End Sub

Ist am Einfachsten.
Grüße Boris
Anzeige
AW: Dann markier mal 10 ganze Spalten...
05.10.2004 10:29:18
Selma
Hallo Matthias und Boris,
es klappt soweit....
Nur noch eine Kleinigkeit......:
wenn ich z.B. über Nummerblock folgendes im meinem Bereich eintippe:
8 wird 08:00 dargestellt (richtig)
845 wird 08:45 dargestellt (richtig)
0045 wird 45:00 dargestellt (falsch, richtig wäre 00:45)
Könntet Ihr mir bitte auch dabei helfen, das Makro anzupassen?
Dankeschön nochmals.....
Gruß
Selma
Gib Null Uhr mit Hochkomma ein...
Boris
Hi Selma,
...denn alles andere wird wieder schwierig.
Also '0045 - wird dann korrekt zu 00:45
Grüße Boris
AW: Über den Nummernblock sollen Zeiten ohne Doppe
06.10.2004 13:15:01
Peter
Hallo Matthias G und Boris
Ich habe mich deines Makros bemächtigt, weil ich gerade eine Verwendung dafür hatte.
Dabei habe ich aber festgestellt, dass Uhrzeiten wie 010 als 10:00 und nicht als 00:10 interpretiert werden. Excel ‚schlabbert’ die führende Null und es kommt nur 10 an.
Gut, das habt ihr auch schon bemerkt. Aber, es ist glaube ich einfacher 800 für 08:00 einzugeben als 0:15, also auch den Doppelpunkt.
Wenn man aber den If folgendermaßen ändert, geht es:


           If Len(.Value) > 2 Then
               s = Left(.Value, Len(.Value) - 2)
               m = Right(.Value, 2)
             Else
               s = 0
               m = .Value
           End If


Prüfe das doch bitte noch mal.
Gruß, Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige