Scrivere in maiuscolo su celle



  • 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.