delimitare parole su cella riga
Hai un problema con Excel? 
delimitare parole su cella / riga
di maxmi data: 10/09/2013 17:06:32
Salve A tutti,
c'è la possibilità con codice vba di delimitare le parole che vengono scritte su una riga,
ed eventualmente con un MsgBox che ti dice che si è raggiunto la
lunghezza massima di inserimento parole ?
Dovrei applicare questo soluzione su una cella / riga
A20-A21
grazie
di totygno71 (utente non iscritto) data: 10/09/2013 17:42:09
ciao maxmi
cosa intendi per "delimitare le parole scritte?"
di maxmi data: 10/09/2013 20:13:23
Ciao totygno71
per delimitazione intendo che su quella cella / riga non si possa scrivere
più di 66 parole.
Quando arrivo alla 66 parola, anche se digito ancora
non mi deve scrivere nulla e se possibile mi esca
un MsgBox.
di totygno71 data: 10/09/2013 20:23:57
ok
ma 69 parole o 69 caratteri
di maxmi data: 10/09/2013 20:38:35
si scusa 66 caratteri
di Vecchio Frac data: 10/09/2013 20:42:31
Non credo che si possa fare.
L'edit in cella non è intercettabile.
Il controllo avverrà dopo aver premuto Invio troncando ai primi 66 caratteri oppure mediante l'inserimento in una textbox (e qui sì il controllo può essere su ogni carattere digitato).
di totygno71 data: 10/09/2013 20:45:24
Ecco VF è come i bimbi.... la voce della verità... ^_^
di maxmi data: 10/09/2013 21:33:54
ok potrebbe andare bene anche una textbox
di HarryBosch data: 11/09/2013 01:05:44
Ciao Ragazzi
anche la convalida dati permette di validare la lunghezza minima e massima di una cella, ma il controllo avviene sempre a posteriori, ovvero all'uscita.
Sotto la scheda -->Sviluppo-->Inserisci troverai i controlli ActiveX tra cui selezionare la textbox, ovvero la "casella di testo". Posizionala nella cella interessata e dalle proprietà (tasto destro) puoi divertirti con le varie opzioni: la proprietà "MaxLenght" permette di impostare un valore max di caratteri.
Allego un semplicissimo file di esempio.
di maxmi (utente non iscritto) data: 11/09/2013 11:10:07
lavoro con excel 2003 non risco ad aprire il tuo file.
Segueno le tue indicazioni non vedo
il controllo ActiveX
o sbaglio io
di Vecchio Frac data: 11/09/2013 11:23:30
Il controllo nel file proposto è quella casella di testo nella cella con lo sfondo giallo.
La conversione da xlsx a xls non permette l'attivazione di tali controlli.
Per riprodurre l'esempio:
- apri un foglio nuovo del tuo Excel
- visualizza la barra dei menu "Strumenti di controllo"
- scegli il controllo textbox
- disegnalo sullo schermo
- ora visualizza le proprietà di questo controllo (tasto destro - proprietà)
- imposta la sua proprietà MaxLength a 10
- sulla barra strumenti di controllo togli la modalità di progettazione (primo pulsantino)
- ora puoi giocare con la textbox (limitata a dieci caratteri)
di maxmi data: 11/09/2013 14:40:46
ok Vecchio Frac
2 cose da chiedere
c'è un sistema per scrivere sempre
in maiuscolo sulla textBox ?
e poi c'è la possibilità di inserire un messaggio che
ti dica raggiunta massima delimitazione inserimento carratteri ?
di maxmi (utente non iscritto) data: 11/09/2013 16:39:03
se volessi percorre la strada x inserire dati attraverso un UserForm
con una textBox.
Io avrei fatto questa bozza codice, vorrei, ma non ne ho le capacità
di eseguire questo form anche sulla riga A21.
Il form dovrebbe attivarsi quando si selezione le righe
A20-A21.
Qualcuno avra' le convulsioni quandro vedrà il codice
abbiate pietà, sto imparando ! accetto le bacchettate nelle mani
come faceva il mio maesto alle scule elementari
tanto tanto tempo fa.
grazie
di HarryBosch data: 11/09/2013 21:06:12
Scusate, non mi ero accorto che già all'inizio era stata indicata la versione 2003 in uso.
cit. -> "c'è un sistema per scrivere sempre in maiuscolo sulla textBox ? "
Me.TextBox1 = UCase(Me.TextBox1)
da legare all'evento Change della textbox (si potrebbe convertire direttamente solo l'ultima lettera inserita, ma su 70 caratteri le prestazioni non ne risentono).
cit. ->" inserire un messaggio che ti dica raggiunta massima delimitazione inserimento caratteri"
If Len(Me.TextBox1) = Me.TextBox1.MaxLength Then
questa istruzione controlla se la lunghezza del testo inserito è pari al numero massimo di caratteri inserito nelle proprietà.
E' necessario un accorgimento per evitare la ricorsione del codice. Inserisci la routine sotto nella Userform e prova a scrivere. All'ultimo carattere inserito esce il messaggio di avviso.
Private Sub TextBox1_Change()
Static bLoop As Boolean
If bLoop Then Exit Sub
bLoop = True
'converto direttamente in maiuscolo man mano che scrivo
Me.TextBox1 = UCase(Me.TextBox1)
If Len(Me.TextBox1) = Me.TextBox1.MaxLength Then
MsgBox "Massima delimitazione inserimento carratteri"
End If
bLoop = False
End Sub |
di HarryBosch data: 11/09/2013 21:37:16
E per il codice che hai scritto non c'è bisogno di bacchettarti ^_^
L'unico accorgimento che posso darti è che per riferirti alla Userform nella quale ti trovi, basta utilizzare il "Me." senza ripetere per esteso Userform2.
cit. -> "Il form dovrebbe attivarsi quando si selezione le righe A20-A21"
Devi agire sull'evento SelectionChange del foglio in questione. Nell'editor vba devi cliccare due volte sul nome del foglio (Dati nel tuo caso) nella finestra dei progetti. In questo modulo riporta la routine sotto.
Ora, selezionando una delle due celle si attiverà la userform. A questo punto dovrai modificare anche l'inserimento del valore, che dovrà avvenire nella cella attiva al momento.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'se l'intervallo selezionato non rientra in A20:A21 esci
If Intersect(Target, [A20:A21]) Is Nothing Then Exit Sub
'altrimenti apro la Form
UserForm2.Show
End Sub
'questa sub va in sostituzione della precedente, per riportare il testo nella cella A20 o A21, a seconda di quella attiva al momento
Private Sub CommandButton1_Click()
ActiveCell = Me.TextBox1.Value
TextBox1.Text = ""
End Sub |
di maxmi data: 11/09/2013 23:42:01
ok ho provato e funziona tutto.
Chiedo,
ho notato che dopo avere inserito dati su riga A20 e poi A21
se per sbaglio mi riposizione nella A20 per
controllare quello che ho scritto mi si riapre il form.
E' possibile che questo accada solo se faccio il doppio clik,
ho sto dicendo una minchiata
Poi c'è il sistema perche' il puntatore sia gia' dentro alla textbox
di HarryBosch data: 12/09/2013 00:06:53
Certo, esiste anche l'evento DoubleClick, da inserire sempre all'interno del foglio interessato, in sostituzione del p recedente SelectionChange.
Per puntare alla textbox all'apertura del form, devi passargli il "fuoco" :)
textbox1.setfocus
da legare all'evento di attivazione della Userform.
Ti riallego il file "textbox in userfom" dove ti ho inserito anche i commenti
di maxmi data: 12/09/2013 11:16:49
Nel foglio dati ho gia questo codice
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
se inserisco anche questo mi dice logicamnete, nome
non univico, come posso avviare a questo problema.
'evento double click
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'se l'intervallo selezionato non rientra in A20:A21 esci
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Me.Range("B4")) Is Nothing Then
UserForm1.Show
'evento double click
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'se l'intervallo selezionato non rientra in A20:A21 esci
If Intersect(Target, [A20:A21]) Is Nothing Then Exit Sub |
di Vecchio Frac data: 12/09/2013 11:26:35
Logicamente devi fondere le istruzioni in un unico evento BeforeDoubleClick.
Non possono coesistere procedure, funzioni o eventi distinti aventi medesima firma.
Le tue istruzioni devono quindi rientrare necessariamente nello stesso blocco "Private Sub Worksheet_BeforeDoubleClick() ... End Sub".
E siccome anche la sequenza delle operazioni è importante, in un linguaggio come VBA che è in parte sequenziale (come i vecchi BASIC) e in parte è event-driven (poichè è basato su piattaforma Windows), ti lascio il piacere di capire quale mettere prima e quale mettere dopo ^_^
di maxmi data: 12/09/2013 11:44:47
ok mi sembra che cosi sia giusto
funziona.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Me.Range("B4")) Is Nothing Then
UserForm1.Show
End If
Cancel = True
'se l'intervallo selezionato non rientra in A20:A21 esci
If Intersect(Target, [A20:A21]) Is Nothing Then Exit Sub
'altrimenti apro la Form
UserForm2.Show
End Sub |
di maxmi data: 12/09/2013 13:11:53
Due Domande ?
sull Userfor2 ho aggiunto un pulsante con il nome Modifica testo
è possibile e come si fa' programmarlo per modificare il testo scritto sulle testBox.
E poi si potrebbe inserire una contatottore che ti conta i caratteri scritti,
visto che ho messo come limite 69 caratteri per riga
grazie
di Vecchio Frac data: 12/09/2013 14:50:34
Sembra che tu stia cercando di reinventare un Notepad ^_^
Le tue prossime domande saranno: come inserire pulsanti di formattazione e allineamento del testo :)
di totygno71 (utente non iscritto) data: 12/09/2013 14:57:19
Orroreeeeeeeeeee.... O_o
Potrebbe trattarsi di un compito in classe! ^_^
di maxmi (utente non iscritto) data: 12/09/2013 16:15:47
e bravo totygno71 !
ma purtroppo i compiti in classe li ho finiti di fare
alle medie nel 1972.
Sono ancora giovane per ricomciare a rifarli !
di maxmi (utente non iscritto) data: 12/09/2013 20:15:51
ciao Vecchio Frac
non voglio creae nessun Notepad ma ho visto
che se volessi correggere una parola dapo avere inserita,
non lo posso fare.
Perche' se seleziona la riga A20 ( per esempio ) mi si riapre il form.
Si puo coreggere quello che si è scritto, andando sulla barra sopra
ma qui mi sei fregato perche' puoi inserire piu di 69 caratteri.
Per quanto riguarda il contatore che ti dice quanti caratteri hai scritto,
e perchè ho visto su vari link che hanno questi contatori,
diciamo come la funzione di excel =lunghezza testo.
di HarryBosch data: 12/09/2013 20:48:39
Puoi sempre inserire una protezione a quelle celle, così l'unico modo per modificarle resta quello di richiamare la Form cliccando due volte. All'apertura della form carichi l'eventuale testo già presente.
Ogni operazione di inserimento in quelle celle dovrà prevedere la disattivazione della protezione e il reinserimento al ternine:
ActiveSheet.Unprotect
' varie operazioni
ActiveSheet.Protect
eventualmente da scrivere con password. Ti riallego il file con questa modifica: "textbox in userform - 1"
di totygno71 (utente non iscritto) data: 12/09/2013 20:55:51
me la spieghi?
Static bLoop As Boolean
If bLoop Then Exit Sub
bLoop = True
bLoop = False
|
di HarryBosch data: 12/09/2013 21:39:39
Come no!
In pratica tutto quell'ambaradan serve per evitare la ricorsione del codice. Se provi a toglierlo, e scrivi nella textbox fino all'ultimo carattere consentito, uscirà la Msgbox di avviso: due volte però! Questo perché l'evento (Change) si scatena sia quando scrivi l'ultimo carattere, sia quando esso viene convertito in maiuscolo.
Onde ciò, una bella Static booleana impedisce il ripetersi della chiamata.
Di solito è sufficiente inserire il codice tra
application.EnableEvents = false
'codice
application.EnableEvents =true
ma in questo caso non funziona. Su questo punto avevo letto un articolo molto interessante, ma non riesco a trovarlo...
di totygno71 (utente non iscritto) data: 13/09/2013 08:43:55
Chiarissimo "l'ambaradam" e soprattutto utile
Grazie Harry_
di Vecchio Frac data: 13/09/2013 09:59:18
cit. "non voglio creare nessun Notepad"
---> Eppure sarebbe un utilissimo esercizio. Ci sono diversi gradi di difficoltà da superare ^_^
di maxmi (utente non iscritto) data: 13/09/2013 18:07:31
si hai raggione Vecchio Frac
ma devo superare anche il mio grado di istruzione
che si è fermato alle medie nel 1972.
Mettici pure che mastico poco l'inglese
sai che frittata!
Comunque si puo' fare, diciamo iniziare.
di maxmi (utente non iscritto) data: 13/09/2013 22:57:59
Ciao HarryBosch
funziona tutto
grazie a tutti !
alla prossima
di maxmi data: 14/09/2013 00:17:55
chudo il post
di Vecchio Frac data: 14/09/2013 09:16:27
cit. "ma devo superare anche il mio grado di istruzione "
---> Questo è irrilevante. Io ho studiato di tutto, tranne informatica e matematica... ti aiuterai con la passione e l'esperienza ^_^
cit. "che si è fermato alle medie nel 1972. "
---> LOL, sei un po' più vecchietto di me allora. Benvenuto nel club ^_^
cit. "Mettici pure che mastico poco l'inglese "
---> Questo, se vogliamo, è l'unico punto che darebbe qualche aiutino in più. Io non ho studiato inglese, ma alla fine le cose sono sempre quelle e dopo un po' si va a senso e intuito, e si capisce benissimo ^_^
di maxmi data: 17/09/2013 21:07:53
ciao Vecchio Frac
scusa se non ti ho risposto prima,
grazie per la tua disponibilità
appena possibile provverò a vedere
di reinventare un Notepad, ma la vedo dura
di maxmi data: 17/09/2013 21:09:20
richiudo
Vuoi Approfondire?