Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1048to1052
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

Timer mit Selection-change absichern

Timer mit Selection-change absichern
14.02.2009 11:26:00
Franz
Hallo Freunde,
bastle an einem Video-Archiv wo ich in einem Blatt SEQUENZEN 10 Timerwerte bzw. Startwerte von Filmabschnitten verwalte. Diese Startwerte nutzt das Mediaplayer-Steuerelement unter currentposition.
Der folgende Code läuft schon ganz gut (ursprünglich aus dem Archiv und ergänzt). Kann man ihn aber noch etwas tunen?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim vWert As String
Dim h As Integer, m As Integer, s As Integer, nozero As Integer
'Eingabe-Beispiel: 062345 oder 62345, es folgt als Timerwert: 06:23:45
'2.Beispiel: 34 ergibt als Timerwert: 00:00:34
'If Target.Column  6 Then Exit Sub
If IsEmpty(Target) Or Selection.Cells.Count > 1 Then Exit Sub
'vWert = CStr(Target.Value)
vWert = Target.Value
If Not IsNumeric(vWert) Then
Target.Value = ""
ActiveCell.ClearContents
Exit Sub
End If
On Error GoTo ERRORHANDLER  'man weiss ja nie!
Select Case Len(vWert)
Case 1: vWert = "00:00:0" & vWert
Case 2: vWert = "00:00:" & vWert
Case 3: vWert = "00:0" & Left(vWert, 1) & ":" & Right(vWert, 2)
Case 4: vWert = "00:" & Left(vWert, 2) & ":" & Right(vWert, 2)
Case 5: vWert = "0" & Left(vWert, 1) & ":" & Mid(vWert, 2, 2) & ":" & Right(vWert, 2)
Case 6: vWert = Left(vWert, 2) & ":" & Mid(vWert, 3, 2) & ":" & Right(vWert, 2)
Case Is > 6
Target.Value = ""
ActiveCell.ClearContents
Exit Sub
End Select
h = Left(vWert, 2):   m = Mid(vWert, 4, 2):   s = Right(vWert, 2)
If h  24 Then
Target.Value = ""
ActiveCell.ClearContents
Exit Sub
End If
If m  60 Then
Target.Value = ""
ActiveCell.ClearContents
Exit Sub
End If
If s  60 Then
Target.Value = ""
ActiveCell.ClearContents
Exit Sub
End If
nozero = h + m + s
If nozero = 0 Then
Target.Value = ""
ActiveCell.ClearContents
Exit Sub
End If
Application.EnableEvents = False
Target.Value = vWert
Application.EnableEvents = True
Exit Sub
ERRORHANDLER:
ActiveCell.ClearContents
Application.EnableEvents = True
End Sub


Was meint der Profi? Bin nur Hobby-Programmierer.
Tschüss!
Franz D.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Timer mit Selection-change absichern
14.02.2009 13:45:00
Daniel
Hi
ich denke mal, so geht einfacher:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not IsNumeric(Target) Then
Target.ClearContents
Exit Sub
End If
Application.EnableEvents = False
If Target.Value > 1 Then Target.Value = Format(Target.Value, "00"":""00"":""00")
Application.EnableEvents = True
End Sub


außerdem scheinst du dir noch nicht so ganz klar darüber zu sein, was die Begriffe TARGET, SELECTION und ACTIVECELL bedeuten.
so ist in diesem Zusammenhang TARGET und SELECTION immer der gleiche Zellbereich (dh. SELECTION wird in TARGET übernommen). Die ACTIVECELL ist immer eine Zelle der SELECTION, somit ist z.B. dieser Code doppeltgemoppelt:


Target.Value = ""
ActiveCell.ClearContents


auch .Value = "" und .ClearContents bewirken das gleiche
Gruß, Daniel

Anzeige
AW: Timer mit Selection-change absichern
14.02.2009 14:26:00
Franz
Hallo Daniel,
Habe mich bisher wenig mit SelectionChange befasst. Du hast es erkannt.
Danke für das "Abspecken". Muss trotzdem noch das Abfangen von Werten wie "25:61:61" (willkürliches Beispiel) berücksichtigen da sie der Mediaplayer nicht erkennt.
Tschüss!
Franz D.
AW: Timer mit Selection-change absichern
14.02.2009 14:39:00
Daniel
Hi
dann so:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Erg
If Target.Cells.Count > 1 Then Exit Sub
If Not IsNumeric(Target) Then
Target.ClearContents
Exit Sub
End If
Application.EnableEvents = False
If Target.Value > 1 Then
Erg = Format(Target.Value, "00"":""00"":""00")
Target.ClearContents
If IsDate(Erg) Then Target.Value = Erg
End If
Application.EnableEvents = True
End Sub


Gruß, Daniel

Anzeige
AW: Timer mit Selection-change absichern
14.02.2009 15:06:00
Franz
Hi Daniel,
Nicht schlecht! Aber : "00:00:00" muss das Makro löschen, "00:00:01" akzeptieren, das Minus-Zeichen muss auch gelöscht werden. Nach deinen Tipps müsste ich dies schon hinkriegen, es sei denn du bist schneller?
HERZLICHEN DANK DANIEL
Franz D.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige