
Originariamente inviato da
TheTruster
Il problema è che anche se si cerca di intercettare l'evento di Change dell'Oggetto Worksheet, Excel esegue prima il cambio di formato in base al valore, pertanto quello che digitiamo, come testo, non corrisponde all'effettivo valore della cella. Tuttavia, quando il formato della cella è impostato come un orario, se cerchiamo di prendere il valore dall'effettivo testo della cella (Target.Text) anche questo - nel caso di valori con la virgola - assume un valore con coerente con l'orario digitato.
L'unica soluzione che sono riuscito a trovare è lavorare con le celle impostate in formato Testo. Questo evita qualsiasi intervento da parte di Excel nell'interpretazione dei dati inseriti che, di conseguenza, vengono lasciati così come sono.
Questo è il codice che ho scritto e che dovrebbe funzionare:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As String
If Intersect(Target, Range("b2:c200")) Is Nothing Then Exit Sub
Application.EnableEvents = False
If InStr(Target.Text, ":") > 0 Then
GoTo Exit_Point
Else
s = Target.Text
s = Replace(s, ".", ":")
s = Replace(s, ",", ":")
Target.Value = s
End If
Exit_Point:
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("b2:c200")) Is Nothing Then Exit Sub
Target.NumberFormat = "@"
End Sub
Come si può notare, nell'evento ChangeSelection dell'oggetto Worksheet, viene ogni volta impostato il formato Testo sulla cella selezionata, se questa ricade nel Range delle celle contenenti un orario.
TheTruster