Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
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
Inhaltsverzeichnis

VBA

VBA
01.02.2023 20:40:52
Papavonzwei
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Eingabe As Variant
On Error GoTo fehler1
If Not Intersect(Target, Range("C2,H2,F37,F43,C5:E35")) Is Nothing Then
    Application.EnableEvents = False
    With Target
        If Not IsNumeric(.Value) Then GoTo fehler1
        If IsEmpty(Target) Then
            Target.Value = ""
            GoTo fehler1
        End If
        .Value = Left(Format(Target, "0000"), 2) & ":" & Right(Target, 2)
        ' funkt am besten
        ' Wenn Std über 24 und gleichzeit Minuten über 60 erfasst werden, wird Text zurückgegeben.
        .NumberFormat = "[hh]:mm"
    End With
End If
fehler1:
Application.EnableEvents = True
End Sub
jetzt will ich in F47 3 stellig schreiben können Value = Left(Format(Target, "00000"), 3) & ":" & Right(Target, 2) dachte so
und hätte gern den befehl für goss schreiben noch
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("c5:c35")) Is Nothing Then
  On Error GoTo ErrorHandler
  Application.EnableEvents = False
  Target.Value = UCase(Target)
ErrorHandler:
  Application.EnableEvents = True
End If
End Sub

aber bekomme nicht alle 3 code in tabelle 1
einzeln funktioniert alles hoffe mir kann einer helfen

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA
01.02.2023 21:03:51
Yal
Guten Tag auch,
[h].mm gilt für alle Stunden, auch über 24. Voraussetzung ist, dass der Inhalt der Zelle als Datum erkannt wird. Daher nicht "IsNumeric" sondern "IsDate".
F47 ist dann nicht separat zu handeln.
Eine "Zweistelligkeit" einer Dauer, falls diese unter 10 Stunden liegt, verwirrt, weil es wir eine Uhrzeit erscheint: 09:23 anstatt 9:32.
IsEmpty muss nicht behandelt werden, wenn das Ziel ist, die Zelle leer zu machen: sie ist es schon.
Fehlerbehandlung ist auch nicht notwendig.
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Not Intersect(Target, Range("C2,H2,F37,F43,F47,C5:E35")) Is Nothing Then
        If IsDate(Target) Then Target.NumberFormat = "[h]:mm"
    End If
    
    If Not Intersect(Target, Range("C5:C35")) Is Nothing Then
        If Not IsNumeric(Target) Then Target.Value = UCase(Target)
    End If
    Application.EnableEvents = True
End Sub
VG
Yal
Anzeige
AW: VBA
01.02.2023 21:22:16
Papavonzwei
danke schonmal gross schreiben geht, jetzt geht aber 7:00 nicht mehr habe immer 700 geschrieben bis 1400 =14:00
in f47 müsste ich 15200 schreiben das 152:00 rauskommt
das sind uhrzeiten die exel addiert hilft das weiter ?
AW: VBA
01.02.2023 21:42:36
Yal
Es ist eine Formatierungsfrage. Wenn Du den ":" dazwischen nichtmehr willst, nimmst Du ihn aus der Foramtierung einfach weg:
If IsDate(Target) Then Target.NumberFormat = "[h]mm"
Aber wenn ich es -doch- hinzwischen verstehe: Du willst 15200 eingeben dürfen und Excel sollte es als Zeit erkennen und daraus 152:00 machen. Richtig?
Ich kenne das Problem, dass die Eingabe des ":" besonders lästig ist. Ich habe es wie folgt gelöst: in den Optionen (Menü "Datei", "Optionen"), Reiter "Dokumentprüfung", "Autokorrektur-Optionen..." Einen Eintrag ",," (zwei Kommas) als "Ersetzen" und ":" als "Durch". Somit wird während das Eintippen 152,,00 in 152:00 umgewandelt. Diese Einstellung wirkt in alle Office-Programme. Durch diese Kniff wird dein Eingabe als Zeit verstanden und das Makro formatiert in [h]:mm oder [h]mm, je nachdem, wie Du es richtest.
VG
Yal
Anzeige
AW: VBA
01.02.2023 21:39:12
Papavonzwei
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Eingabe As Variant
On Error GoTo fehler1
If Not Intersect(Target, Range("C5:C35")) Is Nothing Then
         If Not IsNumeric(Target) Then Target.Value = UCase(Target)
     End If
If Not Intersect(Target, Range("C2,H2,F37,F43,C5:E35")) Is Nothing Then
    Application.EnableEvents = False
    With Target
        If Not IsNumeric(.Value) Then GoTo fehler1
        If IsEmpty(Target) Then
            Target.Value = ""
            GoTo fehler1
        End If
        .Value = Left(Format(Target, "0000"), 2) & ":" & Right(Target, 2)
        ' funkt am besten
        ' Wenn Std über 24 und gleichzeit Minuten über 60 erfasst werden, wird Text zurückgegeben.
        .NumberFormat = "[hh]:mm"
    End With
End If
fehler1:
Application.EnableEvents = True
End Sub
jetzt nur noch f47 für 15200 std
Anzeige
AW: VBA
01.02.2023 22:49:40
Papavonzwei
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Not Intersect(Target, Range("C2,H2,F37,F43,F47,C5:E35")) Is Nothing Then
        If IsDate(Target) Then Target.NumberFormat = "[h]:mm"
    End If
    
    If Not Intersect(Target, Range("C5:C35")) Is Nothing Then
        If Not IsNumeric(Target) Then Target.Value = UCase(Target)
    End If
    Application.EnableEvents = True
End Sub
code klappt garnicht , was ich übernommen habe ist If Not Intersect(Target, Range("C5:C35")) Is Nothing Then
If Not IsNumeric(Target) Then Target.Value = UCase(Target)
End If
Application.EnableEvents = True das klappt super schön währe auch wenn aus frei = Frei wird statt FREI
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Eingabe As Variant
On Error GoTo fehler1
If Not Intersect(Target, Range("C5:C35")) Is Nothing Then
           If Not IsNumeric(Target) Then Target.Value = UCase(Target)
       End If
If Not Intersect(Target, Range("C2,H2,F37,F43,C5:E35")) Is Nothing Then
    Application.EnableEvents = False
    With Target
        If Not IsNumeric(.Value) Then GoTo fehler1
        If IsEmpty(Target) Then
            Target.Value = ""
            GoTo fehler1
        End If
        .Value = Left(Format(Target, "0000"), 2) & ":" & Right(Target, 2)
        ' funkt am besten
        ' Wenn Std über 24 und gleichzeit Minuten über 60 erfasst werden, wird Text zurückgegeben.
        .NumberFormat = "[h]:mm"
    End With
End If
fehler1:
Application.EnableEvents = True
End Sub
ja kann 152 :00 schreiben mit doppelpunkt aber das nervt 15200 ist super wenn das klappen könnte
danke das müsste in F47
Anzeige
Noch offen
02.02.2023 09:25:28
Yal
Moin,
vergesse nicht den Haken bei "Frage noch offen" zu setzen, wenn Du deine eigene Frage beiträgst.
So sehen alle, dass die Frage nicht vollständig beantwortet wurde und können zur Hilfe beitragen.
VG
Yal
AW: Noch offen
02.02.2023 15:14:38
Papavonzwei
noch jemand eine idee ? wie ich das mit F47 lösen kann
gruss Thommy
AW: Noch offen
03.02.2023 12:16:13
Piet
Hallo
ich hatte das Problem auch schon mal bearbeitet. Meine Lösung war recht simpel.
Alle Eingabe Zellen waren auf Text gesetzt du hast richtig gelesen. Und das Makro machte Zeit daraus.
Der Code war klug genug aus NUR 9 = 9:00 zu machen,, und aus 430 = 4:30! Reine Logik Lösung.
Ich prüfte die Stringlange! Extrem kurz = Stunden, bei Minuten immer Right(Target, 2) auswerten.
mfg Piet
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige