› Sviluppare funzionalita su Microsoft Office con VBA › data facilitata
-
AutoreArticoli
-
Se fosse possibile nel mio file sarebbe facilitante che al passaggio del cursore la cella diventasse " / / " cosi poi da inserire solo i numeri della data. Vi ringrazio della cortese attenzione.
Se fosse possibile nel mio file sarebbe facilitante
Quale file? Quello della discussione sul codice fiscale? Non è chiaro quello cui ti riferisci.
Questa è una discussione nuova e diversa, se io la aprissi tra una settimana avrei perso qualsiasi riferimento alla discussione precedente. Comunque quello che chiedi si può fare con un formato personalizzato (##/##/####) ma in cella non compare il marcatore segnaposto.
Scusami non l'ho scritto. Si riferisce alla precedente discussione, se possibile preferirei un codice vba. Distinti saluti.
Questo è il riferimento:
Con VBA si può fare ma non è semplicissimo e bisogna vedere se il gioco vale la candela. Magari dopo ci penso e vedo cosa si riesce a fare.
Quindi questa richiesta è molto complicata?
No dai non essere così pessimista

Allego file di esempio autoesplicativo.
Allegati:
You must be logged in to view attached files.Buongiorno grazie del lavoro. Purtroppo alla riga - If Target = "" Then Exit Sub - mi da errore di overflow che non so risolvere.
Grazie dell'attenzione buona giornata.
E' strano perchè a me ieri dal mio pc (Excel 2013) non succedeva. Mentre qui in ufficio (Excel 2007) dà proprio errore di Overflow e non capisco il motivo.
Comunque ho risolto assegnando alla variabile s il valore Value2 del Target. Ecco il codice modificato che sostituisce il precedente, fai copia incolla nel codice del foglio interessato:
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim s As String If Intersect(Target, Range("input_text")) Is Nothing Then Exit Sub s = Target.Value2 If s = "" Then Exit Sub If Not (s Like "[0-9][0-9][0-9][0-9][0-9][0-9]") And _ Not (s Like "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]") Then Target.Select MsgBox "La data inserita non è valida." Target = "" Exit Sub End If Application.EnableEvents = False If Len(s) = 6 Then s = Left$(s, 2) & "/" & Mid$(s, 3, 2) & "/" & Right$(s, 2) ElseIf Len(s) = 8 Then s = Left$(s, 2) & "/" & Mid$(s, 3, 2) & "/" & Right$(s, 4) End If Target = CDate(s) Application.EnableEvents = True End Subperfetto FUNZIONA. Ma ho un altro problema che ci sono 2 Private Sub Worksheet_Change(ByVal Target As Range) e vanno in conflitto c'è qualche soluzione?
Ti ringrazio della tua cortese attenzione.
Vanno in conflitto sì, perché deve esserci solo un evento che intercetta la modifica in una cella.
I due codici devono essere armonizzati e fatti coesistere, le istruzioni quindi vanno inserite in un unico evento Worksheet_Change in modo che non interferiscano tra loro (eliminando i doppioni, scegliendo le variabili in modo opportuno, e soprattutto disabilitando gli eventi all'ingresso della sub e riattivandoli all'uscita).
Con VBA si può fare ma non è semplicissimo e bisogna vedere se il gioco vale la candela.
Giulio, sei certo che ne valga la pena per evitare di inserire 2 / ?
Il problema del dato personalizzato ##"/"##"/"#### che devo calcolare l'età con data.diff ed ovviamente mi da errore, poi se utilizzo il filtro non mi raggruppa per anno o mese.
Ma diciamo che serve per risparmiare digitazione visto che ho molte date da inserire, comunque sto vedendo se si riesce a mettere i 2 / con una formula.
Vi ringrazio della cortese attenzione.
ed ovviamente mi da errore
Dà errore perchè la stringa immessa nella cella (A4 del mio file di esempio) è solo visualizzata con gli slash ma internamente è considerata un unico testo. Se inserisci "10092022" viene visualizzato "10/09/2022" ma non è una data. Per fare quello che desideri devi trasformare questa stringa in un modo comprensibile a DATA.DIFF:
=DATA.DIFF(SINISTRA(A4;2)&"/"&STRINGA.ESTRAI(A4;3;2)&"/"&DESTRA(A4;4);OGGI();"D")Naturalmente le cose vengono dette sempre a spizzichi e bocconi, per cui le soluzioni che si danno non possono essere né mirate né complete.
Ad ogni modo se utilizzi VBA puoi bypassare questo stratagemma e trattare le stringhe passate in argomento (la cella "Target") con maggior finezza rispetto a una formula. -
AutoreArticoli
