Ciao Nick! Mi piace molto l'istruzione like, personalmente non l'ho mai utilizzata ma mi sto rendendo conto di aver sbagliato ;) Per quanto riguarda l'inversione giorno/mese l'ho risolta inserendo prima dell'istruzione IF la seguente riga: Me.txtDataNascita.Value = Format(Me.txtDataNascita.Value, "DD/MM/YYYY") e lasciando nella seconda riga solo il controllo IsDate: If Not IsDate(Me.txtDataNascita.Value) Then ... Al prossimo video!
@NickTheGeek4 жыл бұрын
Ciao Sandro, grazie per il suggerimento, così sembra funzionare correttamente in modo molto più semplice di quello che ho fatto io, anzi ho visto che se metti un mese >12 allora inverte automaticamente giorno e mese. Mi sembra ottimo!
@filippo614 жыл бұрын
Esplicito come in ogni lezione. Avevo notato lo stesso problema di Maurizio ed ho verificato che il CDate funziona. :)
@NickTheGeek4 жыл бұрын
Ottimo :)
@droitaucoeur13 жыл бұрын
Ciao Nicola. Potevi utilizzare le funzioni Day - Month e Year per la verifica. If Day(txtbox) > 31 or Month(xxxxx) > 12 or Year(xxxxx) > Year(Date) Then.
@NickTheGeek3 жыл бұрын
Ciao Jacky, grazie.
@postalucia2 жыл бұрын
Ciao Nick, Chiaro e con tutte le possibilità che possiamo incontrare! Mi piacerebbe mettere la data (la data di un movimento bancario, per esempio) come in excel: dd/m/yy oppure dd/m e un codice la sistema con precisione dd/mm/yy. è possibile? grazie!
@NickTheGeek2 жыл бұрын
Ciao Lucia, puoi provare con l'evento Exit e la funzione Format, inserendo come secondo parametro il formato che ti interessa: Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Value = Format(TextBox1.Value, "dd/mm/yy") End Sub
@postalucia2 жыл бұрын
@@NickTheGeek 🧡 fatto, riuscito! grazie!
@albertogreco64093 жыл бұрын
Ciao Nick, ad esempio quando scrivi il CAP e non é di 5 cifre ti avvisa con un msgbox dell'errore .Dando l' OK il cursore dovrebbe tornare sulla TXTCAP , io ho provato con il setfocus ,ma prosegue con il campo successivo.
@NickTheGeek3 жыл бұрын
Ciao Alberto, il setfocus non l'ho mai usato proprio perché in effetti va sempre al controllo successivo.
@ThePero30673 жыл бұрын
Ciao Nick, al minuto 25 chiedi aiuto per la convalida della data di nascita. Secondo il mio parere da principiante non dovevi aggiungere niente,hai giá inserito il controllo che dichiara che il dato deve essere DATA.Cosi é impossibile inserire una combinazione di numeri che non sia una data senza far apparire la msgbox di errore. Complimenti ottime spiegazioni.
@NickTheGeek3 жыл бұрын
Ciao, grazie per i complimenti. Non mi ricordo più quale fosse il problema, probabilmente era possibile scrivere qualcosa del tipo "01/13/2021", che normalmente sarebbe sbagliato, ma a quel punto sarebbe stato considerato automaticamente come 13 gennaio 2021. Un ottimo suggerimento (formattare il campo con "DD/MM/YYYY") mi è stato dato da Sandro D'Andrea in un commento sotto a questo stesso video, prova a darci un'occhiata.
@sergio_molinari4 жыл бұрын
Molto bravo Nick, ma se non creo un loop sulla textbox alla pressione del tasto "Conferma" mi permette di registrare comunque il dato errato, posso creare un loop magari con setfocus?
@NickTheGeek4 жыл бұрын
Ciao Sergio, grazie. Sì hai ragione, bisognerebbe controllare in loop la casella altrimenti verrebbe comunque scritto in archivio un dato sbagliato. In realtà la validazione di questa userform andrà avanti per qualche altro video, e nella versione finale questo tipo di verifica ("resti nella userform finché il dato non è corretto") la farò fare al tasto Conferma. Mi sembra di aver provato il SetFocus in caso di errore, e credo ci fosse qualche problema, del tipo che comunque il focus passava al controllo successivo.
@mircoastolfi32094 жыл бұрын
Ciao, per quanto riguarda la convalida della data, avevi pensato di dividere la text box in tre parti separate (gg, mm, aaaa) e magari far apparire un menu a tendina (sempre sia possibile farlo)? Comunque ottimo come sempre.
@NickTheGeek4 жыл бұрын
Ciao Mirco, grazie. No, non avevo pensato a questa possibilità; le soluzioni potrebbero essere almeno due: 1) per blindare completamente l'operatività e quindi evitare del tutto la validazione, il numero di giorni presenti nel relativo menu a tendina dovrebbe basarsi sulla combinazione di mese/anno, però significa far scegliere prima mese/anno, e poi il giorno, e questo andrebbe contro logica (almeno europea) 2) volendo far scegliere invece prima il giorno, per evitare incongruenze occorrerebbe comunque un minimo di validazione, che però immagino sarebbe più snella rispetto a quella attuale. Grazie per il suggerimento, lo metto in lista per parlarne al termine della playlist.
@ms8883 жыл бұрын
Bellissimo argomento. Complimenti. Ho solo un problema quando trasferisco la data in una cella, settata come data italiana, mi appare nella maniera inglese. (mmggaaaa). E stranamente succede fino al giorno 12. Se inserisco per es 13/10/2921 funziona bene.
@NickTheGeek3 жыл бұрын
Grazie Mario. La gestione delle date è uno dei principali problemi in Excel e VBA; probabilmente fino al giorno 12 Excel "si confonde" perché non sa se il 12 è il giorno oppure il mese, e nell''incertezza sceglie la seconda; dal 13 in poi, invece, non ci possono essere dubbi e quindi scrive la data correttamente; le soluzioni possono essere diverse, in base a com'è il tuo foglio e a quale ritieni più opportuna: 1) Se sai che in una specifica cella del foglio ci sarà sempre una data, puoi preformattare la cella come data direttamente da Excel (senza usare VBA), ma da quello che mi scrivi immagino che tu l'abbia già fatto oppure 2) In VBA puoi convertire in data usando la funzione CDate; ad esempio se la cella in cui scrivere è la A1 e prendi la data dalla casella di testo txtData, allora: Cells(1, 1) = CDate(txtData.Value) oppure 3) puoi usare la funzione Format: Cells(1, 1) = Format(txtData.Value, "dd/mm/yyyy") oppure 4) puoi usare la proprietà NumberFormat, ma in questo caso ti servono due linee di codice, una per scrivere il dato e un'altra per formattare: Cells(1, 1) = txtData.Value Cells(1, 1).NumberFormat = "dd/mm/yyyy" Non è detto che tutte funzionino, devi fare delle prove.
@ms8883 жыл бұрын
@@NickTheGeek Il problema è risolto usando la funzione CDate. Grazie ancora per tutto. Ad Maiora !!!
@mauriziobertagna30954 жыл бұрын
Complimenti per la chiarezza nell'esposizione. Ho però un problemino: se nella txtDataDiNascita metto una data futura mi da' correttamente l'errore, ma quando rimetto una data corretta continua a darmi il messaggio di errore! Questo il codice che ho scritto: If Not txtDataNascita.Value Like "##/##/####" Or Not IsDate(txtDataNascita.Value) Or Left(txtDataNascita.Value, 2) > 31 Or Mid(txtDataNascita.Value, 4, 2) > 12 Then MsgBox "La data deve essere inserita nel formato gg/mm/aaaa" ElseIf txtDataNascita.Value > Date Then MsgBox "La data di nascita non può essere una data futura" End If Ho commesso qualche errore? Ciao e grazie per la disponibilità
@NickTheGeek4 жыл бұрын
Ciao Maurizio, grazie per i complimenti. Per quanto riguarda l'errore, potrebbero esserci più motivi, intanto prova a modificare l'istruzione: ElseIf txtDataNascita.Value > Date Then così: ElseIf CDate(txtDataNascita.Value) > Date Then cioè convertendo in formato data il valore della casella di testo. Mi accorgerò di questo errore per puro caso nel prossimo video, e per il momento lo sistemerò così; in ogni caso la validazione di questa userform andrà avanti ancora per qualche video, e la versione finale spero che sia blindata da questo punto di vista, ma più prove fate anche voi e meglio è per capire cosa mi è sfuggito.
@mauriziobertagna30954 жыл бұрын
@@NickTheGeek grazie Nick, con la modifica proposta funziona bene! Grazie! Aspetto il prossimo video con interesse. Ciao.