Rozważałeś to zamiast ?
Zmień ustawienie NumberFormat na wstępowanie za każdym razem komórkę do „General” NumberFormat.
(Trzeba by wejść do komórki w trybie edycji, aby mimo to zmienić datę na tekst, więc nie różni się znacząco)
Zamiast sprawdzać format, gdy jesteś odejście komórka.
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ActiveCell.NumberFormat = "General"
End Sub
Oczywiście może to powodować inne problemy z innymi komórkami, których nie chcesz jako „Ogólne”, ale możesz wykluczyć zakresy, całkiem łatwo, testując ...
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveCell.Column <> 4 Then
ActiveCell.NumberFormat = "General"
End If
End Sub
Po wprowadzeniu daty w ActiveCell Excel nadal konwertuje ją na format daty przy wyjściu, ale ponieważ jest to format „Ogólny”, na początku numer seryjny nie będzie konwertowany na datę, która wydaje się być problemem masz teraz.
Największą wadą jest to, że wybranie istniejącej daty spowoduje jej konwersję na „Ogólne”, ale będąc jeszcze w komórce, zawsze możesz kliknąć prawym przyciskiem myszy i sformatować ją jako datę, jeśli zapomniałeś zauważyć datę przed wyjściem.
Jeśli nadal chcesz zbadać formatowanie komórki w miarę jej opuszczania, możesz również spróbować tego
Przechowuj bieżącą ActiveCell jako zmienną publiczną w module, aby po jej opuszczeniu można jej użyć do sprawdzenia, czy jest to format daty
Funkcja komórki może być najłatwiejszym sposobem na sprawdzenie formatu daty
aCell = Application.Evaluate("=CELL(""format""," & previousCell & ")")
If Left(aCell, 1) <> "D" Then previouseCell.NumberFormat = "General"