Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 19-07-2006, 12.14.32   #1
Gabry
Forum supporter
 
L'avatar di Gabry
 
Registrato: 28-04-2003
Loc.: Svizzera, ma con passaporto UEE (molisano di origine... )
Messaggi: 1.820
Gabry promette bene
[VBA per Excel] controllo immissione data

Vorrei sottoporre alla vostra attenzione il seguente codice:

x = Len(TextBox1)
y = LTrim(TextBox1.Text)
If x = 2 Then TextBox1 = y & "/"
If x = 5 Then TextBox1 = y & "/"
If x = 10 Then
[A1] = CDate(TextBox1)
TextBox1 = ""
End If



In pratica il codice fa questo:

Nella TextBox1 digito la data solo con cifre, ad esempio 01012006. Il codice automaticamente mi immette nella cella A1 la data, ponendo le barre a rovescio tra giorno mese e anno. Vale a dire: 01/01/2006.

Funziona alla grande, se non fosse che: se sbaglio ad inserire delle date, il codice mi va in debug, mancando un controllo sulla digitazione delle date.

Ora se io erroneamente digito 32012006, effettivamente nel calendario il giorno 32 non esiste.

Allora come posso avere un controllo sul codice sopra menzionato? E quindi, invece di mandarmi in Debug, vorrei che mi segnalasse semplicemente l'errore magari ripulendo la TextBox1 e invitandomi ad inserire la data esatta.

È fattibile prima delle ferie?

Grazie a chiunque volesse aiutarmi
___________________________________

ma a voi non capita di pensare a Gesù?
http://ccegv.altervista.org
Gabry non è collegato   Rispondi citando
Vecchio 19-07-2006, 13.58.49   #2
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Utilizza la funzione isDate.
Controlla il numero di giorni validi in base al mese.
Non so però se si occupa di verificare gli anni bisestili...prova
LoryOne non è collegato   Rispondi citando
Vecchio 19-07-2006, 14.07.04   #3
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Quota:
Inviato da LoryOne
Utilizza la funzione isDate.
Controlla il numero di giorni validi in base al mese.
Non so però se si occupa di verificare gli anni bisestili...prova
If IsDate(Format$(Text1, "00/00/00")) Then
Else
End if
LoryOne non è collegato   Rispondi citando
Vecchio 19-07-2006, 15.35.42   #4
Gabry
Forum supporter
 
L'avatar di Gabry
 
Registrato: 28-04-2003
Loc.: Svizzera, ma con passaporto UEE (molisano di origine... )
Messaggi: 1.820
Gabry promette bene
L'ho modificato così:

x = Len(TextBox1)
y = LTrim(TextBox1.Text)
If x = 2 Then TextBox1 = y & "/"
If x = 5 Then TextBox1 = y & "/"
If x = 10 Then

If IsDate(Format$(Text1, "00/00/0000")) Then
Else
MsgBox "La data immessa non é esatta!"
Exit Sub
End If

[A1] = CDate(TextBox1)
TextBox1 = ""
End If

Ma non mi funziona, giusto o sbagliato che si al'inserimento, mi da sempre errore.
___________________________________

ma a voi non capita di pensare a Gesù?
http://ccegv.altervista.org
Gabry non è collegato   Rispondi citando
Vecchio 19-07-2006, 17.09.47   #5
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
L'errore te lo darà per quell' [A1]=CDate(Textbox1).
Supponendo che [A1] altro non sia che la cella A1, il problema si ridurrebbe a queste semplici righe:

Codice:
s_Data$=Format$(TextBox1, "00/00/0000")) 
If IsDate(s_Data$)= False Then
       MsgBox "La data immessa non é esatta!"
Else
       TextBox1=vbNullString
       Range("A1").Select
       Selection.Value=s_Data$
End If
LoryOne non è collegato   Rispondi citando
Vecchio 19-07-2006, 18.09.00   #6
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
If Len(TextBox1) = 8 Then

'Formatto la sequenza numerica come gg/mm/aaaa
'E' Format$ ad aggiungermi automaticamente le "/" in base
'alla maschera che ho specificato
s_Data$ = Format$(TextBox1, "00/00/0000")

'IsDate mi verifica la congruità della data nel formato specificato
If IsDate(s_Data$) = False Then
MsgBox "La data immessa non é esatta!"
Else
TextBox1 = vbNullString
Cells(1, 1).Value = s_Data$
End If
End If

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Piuttosto che effettuare il trim degli spazi a sinistra, evito che possano
'essere digitati, cioè consento solo l'inserimento dei tasti da 0 a 9
If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
End Sub
LoryOne non è collegato   Rispondi citando
Vecchio 20-07-2006, 07.27.50   #7
Gabry
Forum supporter
 
L'avatar di Gabry
 
Registrato: 28-04-2003
Loc.: Svizzera, ma con passaporto UEE (molisano di origine... )
Messaggi: 1.820
Gabry promette bene
Grazie per le indicazioni Lory, ottimo il suggerimento di limitare l'inserimento dei soli numeri.
Il problema del controllo della data da me non funziona ancora. Giusto o sbagliato che sia l'imissione della data, continua ad apparirmi il messaggio: "La data immessa non é esatta!".
___________________________________

ma a voi non capita di pensare a Gesù?
http://ccegv.altervista.org
Gabry non è collegato   Rispondi citando
Vecchio 20-07-2006, 08.05.05   #8
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Mi spiace Gabry ma temo che purtroppo dovrai andare in ferie con la data sbagliata

E' piuttosto improbabile che non funzioni il codice che ti ho postato ma è anche possibile che l'errore sia dovuto a parti di codice che non hai postato.
Su quale riga parte il debug ?
LoryOne non è collegato   Rispondi citando
Vecchio 20-07-2006, 09.22.22   #9
Gabry
Forum supporter
 
L'avatar di Gabry
 
Registrato: 28-04-2003
Loc.: Svizzera, ma con passaporto UEE (molisano di origine... )
Messaggi: 1.820
Gabry promette bene
Quota:
Inviato da LoryOne
Mi spiace Gabry ma temo che purtroppo dovrai andare in ferie con la data sbagliata
E' piuttosto improbabile che non funzioni il codice che ti ho postato ma è anche possibile che l'errore sia dovuto a parti di codice che non hai postato.
Su quale riga parte il debug ?

Questo é il codice completo:


Private Sub CommandButton1_Click()
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox1.SetFocus
End Sub

__________________________________________________ ______________

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Piuttosto che effettuare il trim degli spazi a sinistra, evito che possano
'essere digitati, cioè consento solo l'inserimento dei tasti da 0 a 9
If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
End Sub

__________________________________________________ _______________

Private Sub TextBox1_Change() 'si sfrutta l'evento Change

X = Len(TextBox1) 'si misura la lunghezza del testo nella texbox ad ogni digitazione (Change)
y = LTrim(TextBox1.Text) 'si legge il contenuto della textbox ad ogni digitazione
If X = 2 Then TextBox1 = y & "/" 'e si concatena testo e una barra quando si è scritto 2 caratteri
If X = 5 Then TextBox1 = y & "/" 'poi si concatena testo e seconda barra quando il testo è 5 caratteri
If X = 10 Then 'quando il testo sarà lungo 8 caratteri (op. mettere 10 se anno a quattro cifre)

[A1] = CDate(TextBox1) 'si copia il testo come data (CDate) in una cella

TextBox2.SetFocus
End If
End Sub

__________________________________________________ _______________

Private Sub TextBox2_Change()

X = Len(TextBox2) 'si misura la lunghezza del testo nella texbox ad ogni digitazione (Change)
y = LTrim(TextBox2.Text) 'si legge il contenuto della textbox ad ogni digitazione
If X = 2 Then TextBox2 = y & "/" 'e si concatena testo e una barra quando si è scritto 2 caratteri
If X = 5 Then TextBox2 = y & "/" 'poi si concatena testo e seconda barra quando il testo è 5 caratteri
If X = 10 Then 'quando il testo sarà lungo 8 caratteri (op. mettere 10 se anno a quattro cifre)

[B1] = CDate(TextBox2) 'si copia il testo come data (CDate) in una cella

'Unload Me
Range("C1").Select
End If

TextBox3.Text = [C1]
TextBox4.Text = [d1]
TextBox5.Text = [e1]
End Sub
__________________________________________________ _______________
___________________________________

ma a voi non capita di pensare a Gesù?
http://ccegv.altervista.org
Gabry non è collegato   Rispondi citando
Vecchio 20-07-2006, 09.25.29   #10
Gabry
Forum supporter
 
L'avatar di Gabry
 
Registrato: 28-04-2003
Loc.: Svizzera, ma con passaporto UEE (molisano di origine... )
Messaggi: 1.820
Gabry promette bene
Avevo modificato l'eventoTextBox1_Change in questo modo:

Private Sub TextBox1_Change()

If Len(TextBox1) = 10 Then

s_Data$ = Format$(TextBox1, "00/00/0000")

If IsDate(s_Data$) = False Then
MsgBox "La data immessa non é esatta!"
Else
TextBox1 = vbNullString
Cells(1, 1).Value = s_Data$
End If
'End If


'X = Len(TextBox1)
'y = LTrim(TextBox1.Text)
'If X = 2 Then TextBox1 = y & "/"
'If X = 5 Then TextBox1 = y & "/"
'If X = 10 Then

[A1] = CDate(TextBox1) 'si copia il testo come data (CDate) in una cella

TextBox2.SetFocus
End If
End Sub
___________________________________

ma a voi non capita di pensare a Gesù?
http://ccegv.altervista.org
Gabry non è collegato   Rispondi citando
Vecchio 20-07-2006, 09.46.27   #11
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Ora ho capito tutto.
Non è sull'evento change che devi intervenire per la verifica della data ma sul keypress.
Mi è chiara anche un'altra cosa e cioè che tu vuoi che venga aggiunta e visualizzata la "/" quando digiti le prima 2 cifre per il giorno e le 2 cifre del mese.
Se prima però non immetti anche le 4 cifre (o 2 se preferisci) dell anno, non puoi verificare la congruità della data.
Infatti:
Per i bisestili febbraio ne ha 29 ma prima inserisci i giorni
Aprile,Giugno,Settembre e Novembre ne hanno 30 ma tutti gli altri 31. non puoi verificare che il giorno sia corretto se prima non immetti il mese che a sua volta dipende dall' anno.
Ragiona sempre sul keypress e non sul change perchè è meno facile gestirlo.
Ad ogni modo, ti suggerisco di evitare di utilizzare una semplice textbox e di passare ad maskeditbox che sicuramente ti faciliterà il compito per quanto riguarda la formattazione della data.
LoryOne non è collegato   Rispondi citando
Vecchio 20-07-2006, 10.39.10   #12
Gabry
Forum supporter
 
L'avatar di Gabry
 
Registrato: 28-04-2003
Loc.: Svizzera, ma con passaporto UEE (molisano di origine... )
Messaggi: 1.820
Gabry promette bene
Quota:
Inviato da LoryOne
...Ad ogni modo, ti suggerisco di evitare di utilizzare una semplice textbox e di passare ad maskeditbox che sicuramente ti faciliterà il compito per quanto riguarda la formattazione della data.

Ti ringrazio per le spiegazioni, ora cercherò di applicarle... ma mi dici cosa é una maskeditbox, dove la prendo?
___________________________________

ma a voi non capita di pensare a Gesù?
http://ccegv.altervista.org
Gabry non è collegato   Rispondi citando
Vecchio 20-07-2006, 19.13.08   #13
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
E' tra i controlli aggiuntivi.
LoryOne non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
[VBA Excel] Formattare risultato formula. Emily Programmazione 5 17-06-2008 08.25.57
nome file : data corrente PROGRAMAN Programmazione 4 25-12-2007 16.18.00
Smart Data Recovery 3.4 Thor Archivio News Software 1 17-12-2007 13.35.18
Politica & co.: gli EXIT POLL Flying Luka Chiacchiere in libertà 357 11-04-2006 07.36.41
[XP/SP2] Controllo in corso del file System primoair Windows 7/Vista/XP/ 2003 2 28-02-2006 21.13.01

Orario GMT +2. Ora sono le: 03.35.48.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.