Вы рассматривали это вместо этого?
Меняйте NumberFormat при входе в ячейку на "General" NumberFormat каждый раз.
(В любом случае вам нужно будет ввести ячейку в режиме редактирования, чтобы перейти от даты к тексту, чтобы она существенно не отличалась)
Вместо проверки формата, когда вы покидаете ячейку.
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ActiveCell.NumberFormat = "General"
End Sub
Конечно, это может создать другие проблемы с другими ячейками, которые вы не хотите использовать в качестве "общих", но вы можете исключить диапазоны, довольно легко тестируя ...
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveCell.Column <> 4 Then
ActiveCell.NumberFormat = "General"
End If
End Sub
Когда вы вводите дату в ActiveCell, Excel все равно преобразует ее в формат даты при выходе, но, поскольку это "общий" формат, начинать с серийного номера не будет преобразовано в дату, что, по-видимому, является проблемой. у тебя сейчас.
Самым большим недостатком является то, что выбор существующей даты преобразует ее в "Общие", но, находясь в ячейке, вы всегда можете щелкнуть правой кнопкой мыши и отформатировать ее как дату, если вы забыли заметить дату до выхода.
Если вы все еще хотите изучить форматирование ячейки по мере ее выхода, вы можете попробовать это
Сохраните текущий ActiveCell как переменную Public в модуле, чтобы при выходе из него можно было использовать его для проверки формата даты
Функция Cell может быть самым простым способом проверки формата даты.
aCell = Application.Evaluate("=CELL(""format""," & previousCell & ")")
If Left(aCell, 1) <> "D" Then previouseCell.NumberFormat = "General"