Processare lunghezza campi userform
Hai un problema con Excel? 
Processare lunghezza campi userform
di Fedora (utente non iscritto) data: 12/10/2015 11:54:23
Buongiorno,
per controllare che ciascun campo di una userform (nomeAcc, CognomeAcc, viaAcc, LuogoNascitaAcc, LuogoResidenzaAcc, RegioneAcc…) non sia inferiore a x caratteri e non venga accettato un valore numerico uso con questa routine per ciascun campo variando ovviamente il nome del campo:
Dato però che oltre alla serie Acc (accompagnatore), ne esistono altre, Ospite, Referente1, Referente2… ed altre ancora, mi trovo a processare una trentina di campi che hanno la stessa caratteristica e lunghezza per cui ripetere per ciascuno Private Sub …..Exit(ByVal…..) mi ritrovo paginate di codice.
Ho provato con Select Case ma non ne sono capace e non so se neppure sia la via giusta o se la via esista.
Aiuti graditissimi (magari step by step…)
Fedora
Private Sub nomeAcc _Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(nomeAcc.Value) Or nomeAcc.TextLength <= x Then
MsgBox ("Errore, Nome Accompagnatore non valido: " & nomeAcc.Value)
nomeAcc.Text = ""
Cancel = True
End If
End Sub
|
di alfrimpa data: 12/10/2015 12:47:01
Ciao Fedora
Vorrei porti alcune domande.
1) Tu vuoi che la verifica venga effettuata solo sui controlli che hanno suffisso "Acc" nel nome?
2) La verifica deve avvenire ogni volta che si esce da uno specifico controllo (come credo tu faccia con il tuo codice) oppure si può pensare ad un pulsante che faccia la verifica per tutti i controlli?
3) Il codice che tu hai scritto (per il singolo controllo) funziona, limitatamente a quello, correttamente?
4) Potresti allegare un file di esempio con la tua form in modo da poter fare dei test "sul campo"?
5) Che versione di Excel utilizzi.
Non so se riuscirò a risolvere il problema ma almeno ci proviamo.
Alfredo
di fedora (utente non iscritto) data: 12/10/2015 22:27:02
Ciao alfrimpa,
La form deve riempire una specie di anagrafica di personaggi per cui avrò per ciascuno Nome, Cognome, Indirizzo, luogo di nascita, luogo di residenza etc... campi testo, ed avrò pertanto: Nome1Personagg, Cognome1Personaggio, LuogoNascita1Personaggio etc...poi Nome2Personagg, Cognome2Personaggio,.......
Per ciascun campo devo essere sicura che sia inserito un valore letterale e non numerico e che la lunghezza sia almeno x caratteri;
2) la verifica dovrebbe avvenire all'uscita di ogni campo, escludendo il pulsante in quanto dovrei controllare anche il cap, il telefono ed il codice che escludono il campo letterale ed hanno poi lunghezze diverse, per cui altro pulsante...no, resterà per ciascun cap, telefono e codice, la routine di esempio. (non vedo altro)
3) il codice riportato funziona, difatti se scrivo sul campo "nome1Personaggio" un numero, interviene la funzione "IsNumeric" o se scrivo una stringa più corta di x caratteri interviene la funzione "Length <= x", msgbox riporta a schermo l'errore e in cosa consiste. con Ok sul msgbox il campo mal riempito viene riportato a "" e cancel = true mi rimette il cursore sul campo fino a che non rispetto i parametri;
4) Si tratta di Word 20007
di alfrimpa data: 13/10/2015 12:12:48
Ciao Fedora.
Cominciamo dall'ultima domanda: ti avevo chiesto che versione di Excel usi presupponendo che stessi utilizzando tale programma.
Tu mi hai risposto che usi Word (2007?); se è così mi devo ritirare in buon ordine perché io uso Word solo come macchina da scrivere e non conosco il suo VBA; ma poi perché usare Word per la gestione di quello che credo sia un database? Esistono strumenti ben più adatti come Excel oppure Access.
Comunque se il controllo deve essere fatto su specifiche caselle di testo credo che non vi sia altra strada che predisporre il codice per ciascuna di queste.
Non puoi allegare un file di esempio (senza dati sensibili)? Magari c'è qualcun altro che può intervenire.
Alfredo
Vuoi Approfondire?