Hai considerato questo invece ?
Modificare NumberFormat inserendo una cella in NumberFormat "Generale" ogni volta.
(Dovresti inserire la cella in modalità di modifica per passare comunque da una data al testo, quindi non è significativamente diverso)
Invece di controllare il formato quando si esce dalla cella.
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ActiveCell.NumberFormat = "General"
End Sub
Naturalmente questo può creare altri problemi con altre celle che non desideri come "Generali", ma potresti escludere gli intervalli, abbastanza facilmente testando ...
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveCell.Column <> 4 Then
ActiveCell.NumberFormat = "General"
End If
End Sub
Quando inserisci una data in un ActiveCell, Excel la convertirà comunque in formato data all'uscita, ma poiché si tratta di un formato "Generale" per iniziare con un numero seriale non verrà convertita in una data, che sembra essere il problema Adesso hai.
Lo svantaggio maggiore è che la selezione di una data esistente la convertirà in "Generale", ma mentre sei ancora nella cella puoi sempre fare clic con il pulsante destro del mouse e formattarla come data, se ti sei dimenticato di notare quale fosse la data prima di uscire.
Se vuoi ancora esplorare la formattazione della cella mentre la lasci, puoi provare anche questo
Memorizza l'ActiveCell corrente come variabile pubblica in un modulo in modo che quando lo lasci, puoi usarlo per verificare se è un formato data
La funzione Cella potrebbe essere il modo più semplice per testare un formato data
aCell = Application.Evaluate("=CELL(""format""," & previousCell & ")")
If Left(aCell, 1) <> "D" Then previouseCell.NumberFormat = "General"