Scrivere in maiuscolo su celle
Hai un problema con Excel? 
Scrivere in maiuscolo su celle
di maxmi data: 18/05/2013 18:25:36
ciao a tutti
Volevo aiuto per due cose.
Con questo codice digitanto del testo sulle celle,
da miniscolo poi diventa maiuscolo.
Io vorrei invece che quando vado scrivere mi comparisse
gia maiuscolo.
Inoltre vorre farlo solo su alcune celle
esempio B6-C6-D6-E6-E8
e capire in seguito come estenderlo su altre celle
grazie
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "" Then
Exit Sub
Else
Target.Value = UCase(Target.Value)
End If
End Sub
|
di Mister_x (utente non iscritto) data: 18/05/2013 18:36:33
ciao
la sub() per questo lavoro, in base hai tuoi dati e' pressapoco cosi, usando l'applicazione o funzione intersect()
ciao
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B6,C6,D6,E6,E8")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True
End Sub |
di maxmi data: 18/05/2013 22:40:42
ciao
ho provato la tua sub ok funziona,
volevo capire alcune cose.
La prima non c' è un sistema che il testo digitato compare gia maiuscolo
senza che ci si deve spostare da una cella all'altra perche diventa maiuscolo.
La seconda
se ho piu celle da eseguire la stessa funzione, per non scrive un codice lungo
come si fa ?
grazie
allego file,in giallo le celle che vorrei comparisse il testo in maiuscolo
di Vecchio Frac data: 19/05/2013 09:35:59
Bravo maxmi e Mister_x, avete googlato bene e avete trovato entrambi la medesima discussione in cui si parla di questo argomento ^_^
Così quindi avete già intuito che il mezzo più rapido per risolvere la richiesta è premere Caps Lock (il tasto blocca maiuscole) quando serve.
Nello stesso forum (o sul sito di supporto di Microsoft) potete trovare come impostare da codice la pressione di tale tasto.
Visivamente comunque l'effetto è abbastanza ininfluente (se l'utente digita in minuscolo e il programma converte subito in maiuscolo non fa differenza).
La soluzione compatta con Intersect e la specifica del range interessato è la migliore, e non allunga nemmeno troppo il codice.
di Mister_x (utente non iscritto) data: 19/05/2013 11:39:08
ciao
nel tuo caso era abbastanza aggiungere tutti i Range() che ti interessavano al contesto, vedi il tuo file con le modifiche alla sub()
altra cosa alla sub() CLOCK() ho aggiunto un controllo di eventi,DoEvents, questi non fa altro che intercettare l'evento di scrittura in una cella , fermare lo sfarfallio che si presenta e al cambio della cella riprendere il suo corso all'orologio
ciao
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B6,C6,D6,E6,E8:E14,A18:A21,A24:B28,E23:E29,A31:B35,C31:C35,A38:E41")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True
End Sub
Sub CLOCK()
If ThisWorkbook.Worksheets("Intervento").Range("F8").Value = "X" Then Exit Sub
DoEvents ''controllo eventi
ThisWorkbook.Worksheets("Intervento").Range("F8").Value = Format(Now, "hh:mm:ss AM/PM")
Application.OnTime Now + TimeSerial(0, 0, 1), "clock"
End Sub |
di maxmi data: 19/05/2013 17:26:30
Ciao Mister_x,
ciao Vecchio Frac
Ho provato a scrivere qualcosa su tutte le celle indicate, e finora tutto ok.
Poi ho iniziato a cancellare quello che avevvo scritto
con il tasto canc.
Ho iniziato dal fondo foglio, e arrivato alla range C31
mi va in debag, ( impossibile eseguire il codice in modalità interuzzione )
In giallo viene evidenziato Target = Ucase ( Targer )
mi sapete dire perchè
di Mister_x (utente non iscritto) data: 19/05/2013 17:47:07
ciao
La sub() va in debug perche' tu modifichi contemporaneamente molte celle mentre l'evento e fatto per una singola cella, quindi basta in questo caso aggiungere una riga di controllo di errore
On Error Resume Next , vedi help di VBA
questo se esiste un errore, nel tuo caso alla riga,
Target = UCase(Target) ,perche una sola celle e non tutte le celle che tu hai selezionato e annullate in un sol colpo
fa avanzare la sub() senza fermare il tutto
ciao
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B6:E6,E8:E14,A18:A21,A24:B28,E23:E29,A31:B35,C31:C35,A38:E41")) Is Nothing Then Exit Sub
On Error Resume Next ''controllo all'errore di linea
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True
End Sub |
di Vecchio Frac data: 19/05/2013 18:01:35
Dopo If Intersect... devi scrivere
If target = "" then exit sub
di Mister_x (utente non iscritto) data: 19/05/2013 18:27:53
ciao V.F.
se usiamo l' if target = "" Then exit sub
questi va sempre in debag perche' l'intervento viene fatto su un range() e non sulla singola cella, quindi per forza di cose dobbiamo controllare l'errore e far proseguire il listato di programmazione per questo bisogna usare On Error per il controllo
ciao da Mister_x
di Vecchio Frac data: 19/05/2013 21:13:49
Sì, bravo Mister_x, grazie per aver segnalato la svista.
Quella riga serve solo per il Canc su una cella sola.
Tendenzialmente io evito di usare On Error.
La correzione è comunque semplice.
Notate che non si possono concatenare con Or le condizioni perchè vengono valutate tutte e invece bisogna escludere caso per caso.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
If Intersect(Target, Range("B6:E6,E8:E14,A18:A21,A24:B28,E23:E29,A31:B35,C31:C35,A38:E41")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True
End Sub
|
di maxmi data: 19/05/2013 23:25:31
Vi ringrazio x la vostra risposta
come sempre esauriente.
Vuoi Approfondire?