Scrivere maiuscolo



  • Scrivere maiuscolo
    di Antonio (utente non iscritto) data: 28/05/2013 15:13:28

    Ciao a tutti. È possibile formattare un intero foglio di lavoro oppure tramite formula per scrivere solo maiuscolo? Praticamente se io in qualche cella scrivo minuscolo automaticamente me lo fa maiuscolo. Grazie



  • di totygno71 data: 28/05/2013 15:22:35

    ciao Antonio
    ecco
    prova sto pezzettino di codice
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Target = UCase(Target)
    End Sub



  • di Antonio (utente non iscritto) data: 28/05/2013 22:30:53

    Ok, il codice va benissimo. Cosa devo cambiare invece per scrivere tutto minuscolo? E solo l'iniziale maiuscola?



  • di mabolsie data: 28/05/2013 23:03:16

    Ciao Antonio, prova questo codice

    Ciao Max
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Target = StrConv(Target, vbProperCase)
    End Sub



  • di Vecchio Frac data: 29/05/2013 11:38:15

    Per prudenza io disabiliterei gli eventi quando si modificano i contenuti di una cella all'interno di un evento che gestisce i cambiamenti di una cella, per evitare problemi di ricorsività, e li riabiliterei all'uscita. Vale per tutti gli eventi in cui si intercetta la modifica di un foglio o una cella (_selectionchange, _change, ecc.).
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        application.EnableEvents = false
        Target = StrConv(Target, vbProperCase)
        application.EnableEvents = true
    End Sub






  • di mabolsie data: 29/05/2013 12:36:01

    @ VF

    Ciao, non ho capito la faccenda degli eventi delle celle potresti rispiegarmelo magari con un esempio ( Duro di comprendonio).

    Ciao Max



  • di Antonio (utente non iscritto) data: 29/05/2013 21:53:19

    Per scrivere tutto minuscolo cosa devo modificare nella formula?



  • di mabolsie data: 29/05/2013 22:07:51

    Ciao Antonio, non potevi chiederci tutto insieme ??

    Comunque fai così
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        application.EnableEvents = false
        Target = Lcase(Target)
        application.EnableEvents = true
    End Sub



  • di Vecchio Frac data: 29/05/2013 22:16:10

    @antonio
    LCase(stringa)
    oppure
    StrConv(stringa, vbLowerCase)

    @max
    In soldoni.
    Quando Excel gestisce un evento come Change (modifica del contenuto di una cella) o SelectionChange (cambia la cella attiva) lo continua a gestire indipendentemente dal codice; se il codice stesso modifica una cella, richiama a sua volta l'evento Change (se stesso) e entra in ricorsione (cioè continua a eseguire codice su se stesso); in realtà Excel è intelligente abbastanza da fermarsi dopo un po').
    Prova a commentare il primo EnableEvents, poi imposta un punto di interruzione su "Target = ...", quindi torna sul foglio e scrivi in una cella, confermando con invio. Il codice si ferma nell'evento. Ora prosegui passo passo con F8 e vedi cosa succede ^_^






  • di mabolsie (utente non iscritto) data: 29/05/2013 22:43:36

    @ VF

    ti ringrazio per la pazienza, ho capito e provo a fare quello che hai detto.

    Ciao Max



  • di Antonio (utente non iscritto) data: 30/05/2013 07:20:40

    Ok, perfetto. Grazie anche della spiegazione tecnica.



  • di Antonio (utente non iscritto) data: 31/05/2013 07:21:40

    Scusate un ultimissima cosa, per far funzionare la formula invece sul foglio di lavoro in tutta la cartella devo modificare Worksheet in Workbook?



  • di Vecchio Frac data: 31/05/2013 10:38:22

    Il concetto è quello ma cambia che:
    1) devi accedere all'editor di codice di ThisWorkbook invece che del foglio singolo
    2) il nome del'evento è diverso (SheetChange)
    3) la firma dell'evento è diversa da quella simile del singolo foglio, perchè il Workbook è composto da più Sheets e l'evento deve poter sapere a quale Sheet ti riferisci (anche se poi nel corpo del codice non lo referenzi)
     
    'codice di ThsiWorkbook
    Option Explicit
    
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        Application.EnableEvents = False
        Target = LCase(Target)
        Application.EnableEvents = True
    End Sub






  • di Antonio (utente non iscritto) data: 31/05/2013 12:29:21

    Ok, perfetto come sempre!