Trasformare in maiuscolo



  • Trasformare in maiuscolo
    di tommy270881 data: 04/09/2015 15:08:57

    Buona sera a tutti.
    Sto utilizzando il seguente codice per trasformare i valori inseriti in alcune celle in maiuscolo in particolare B17 B19 B21 B23 B25 B27 B29 B31 B33 B35 B37 B39.
    Il codice funziona perfettamente tuttavia c'e un problema. Se dopo la digitazione torno sulla cella, cancello il contenuto e mi muovo verso un'altra cella il foglio impazzisce.
    Credo che sia necessario introdurre un altro evento che intervenga nel momento in cui la cella è vuota: non fare nulla.
    Qualcuno può darmi un aiutino?
    Saluti.
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$17" Then
    Target = UCase(Target)
    End If
    End Sub



  • di alfrimpa data: 04/09/2015 15:42:05

    Ciao

    Dopo la seconda riga prova ad inserire la sottostante istruzione.

    Alfredo
     
    If Target.Value = "" Then Exit Sub






  • di tommy270881 data: 04/09/2015 16:25:22

    Alfredo se non ci fossi tu. Grazieeeee milleeeeee



  • di scossa data: 04/09/2015 16:36:10

    cit.: "Target = UCase(Target)"

    @Alfredo: ce ne vogliamo ricordare degli *eventi* !?!?!?!?!



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)



  • di alfrimpa data: 04/09/2015 16:57:27

    Hai ragione scossa ma mi è rimasta in punta di......tastiera.

    Alfredo   

    P.S. Sono in attesa di altre correzioni
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If target.Value = "" Then Exit Sub
    If Target.Address = "$B$17" Then
    Target = UCase(Target)
    End If
    Application.EnableEvents = True
    End Sub
    






  • di Vecchio Frac data: 04/09/2015 17:53:56

    cit. P.S. Sono in attesa di altre correzioni
    ---> Ecco la mia: non scordate Trim() quando si confrontano valori vuoti.
    Se la cella contiene uno spazio, la cella sembra vuota ma non lo è.

    If trim(target.Value) = "" Then Exit Sub






  • di alfrimpa data: 04/09/2015 18:25:54

    Grazie VF.

    Purtroppo i risvolti da tenere a mente in tutte le circostanze sono tanti e spesso non si riesce a tenerli a mente tutti.

    Come si fa a tenere traccia di una miriade di "tips and tricks" che possono venire utili all'occorrenza?

    Alfredo





  • di totygno71 data: 04/09/2015 19:11:03

    VF Er Pignolo U_U



  • di scossa data: 04/09/2015 19:32:26

    cit.: "P.S. Sono in attesa di altre correzioni "

    Eh sì, e l'errore è grave!

    Già in altro thread avevo evidenziato la pericolosità di:
    If target.Value = "" Then Exit Sub
    Con quel codice se la cella è vuota gli eventi restano disabilitati!

    Oltretutto il problema della cella vuota o con spazi, è irrilevante: UCase semplicemente non trasforma lo spazio in "spazio maiusocolo"




    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)

     
    Private Sub Worksheet_Change(ByVal Target As Range)
    
      If Target.Address = "$B$17" Then
        Application.EnableEvents = False
        Target = UCase(Target)
        Application.EnableEvents = True
      End If
    End Sub



  • di alfrimpa data: 04/09/2015 19:46:48

    Cit.: "eh si e l'errore è grave"

    Da segnare con doppio frego blu!
    Sono stato bocciato agli esami

    Alfredo





  • di scossa data: 04/09/2015 20:03:29

    cit.: "sono stato bocciato agli esami "

    Solo rimandato a settembre.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di alfrimpa data: 04/09/2015 20:16:31

    Che bello beneficiare della munificenza dei professori

    Tornando seri, come ho detto tante volte, la mia conoscenza del VBA è solo frutto del mio impegno da autodidatta non avendo mai seguito corsi nè avendo svolto quest'attività professionalmente.

    Diciamo che ho una preparazione "artigianale" che cerco di migliorare seguendo questo ed altri forum.

    Va da sè che posso incappare in "strafalcioni" come il precedente e di questo, oltre ad esserne dispiaciuto, me ne scuso con la comunità.

    Alfredo





  • di scossa data: 04/09/2015 20:37:28

    cit. Alfrimpa: "la mia conoscenza del VBA è solo frutto del mio impegno da autodidatta"

    E devi essere fiero dei risultati raggiunti; errori ne facciamo tutti, io per primo!


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di alfrimpa data: 04/09/2015 23:12:01

    Grazie scossa.

    Detto da te è per me un ulteriore stimolo a migliorare.

    Alfredo





  • di alfrimpa data: 05/09/2015 13:04:21

    @ scossa

    Mi faresti la cortesia di ripostare il codice da mettere in una Worksheet_Change per gestire (senza che la macro vada in debug) la multiselezione/cancellazione del target?

    Grazie

    Alfredo





  • di scossa data: 05/09/2015 13:47:43

    cit.: ".... il codice da mettere in una Worksheet_Change per gestire (senza che la macro vada in debug) la multiselezione/cancellazione del target?"

    Se non è prevista alcuna limitazione del codice ad un preciso intervallo di celle (niente If not Intersect ....) il primo codice è sufficiente.
    Se si inserisce una limitazione ma si prevede che il target sia o tutto compreso o tutto escluso dall'intervallo di controllo, allora può ancora bastare il primo codice.

    Il secondo codice garantisce la massima sicurezza, in quanto verifica che la singola cella del target appartenga all'intervallo di limitazione.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.(George Bernard Shaw)

     
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim cella As Range
      
      If Not Intersect(Target, Me.Range("A1:B20")) Then 'se si vuole limitare l'effetto
      
        For Each cella In Target
          'Application.EnableEvents = False 'se il codice seguente modific il valore di una cella del Target
          '... codice
          'Application.EnableEvents = True
        Next
      
      End If
    
    	End Sub
    
    	
    '---------------------------------------
    '
    'Versione di "massima sicurezza":
    '
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim cella As Range
      
      For Each cella In Target.Cells
        If Not Intersect(cella, Range("A1:B20")) Is Nothing Then
          Application.EnableEvents = False 'se il codice seguente modific il valore di una cella del Target
          cella.Value = cella.Address
          Application.EnableEvents = True
        End If
      Next cella
    
    End Sub
    



  • di alfrimpa data: 05/09/2015 13:54:34

    Grazie scossa per la risposta e la tempestività.

    Me le devo studiare per bene perché, a prima vista, mi appaiono un po' "oscure"

    Alfredo





  • di totygno71 data: 05/09/2015 19:28:49

    @ scossa

     
     If Not Intersect(Target, Me.Range("A1:B20")) Then 'se si vuole limitare l'effetto
      
    'ti è scappato Is Nothing



  • di scossa data: 05/09/2015 19:34:47

    cit. Totygno: "ti è scappato Is Nothing"

    Perdindirindina!

    Ora interverrà perché (utente non registrato) redarguendomi perché non ho studiato abbastanza la Intersect


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di scossa data: 05/09/2015 19:36:48

    P.S.: ovviamente hai ragione, ho editato il codice nella finestra del messaggio e ho fatto casino.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)



  • di totygno71 data: 05/09/2015 19:37:00

    ESATTO.... OKKIO QUINDI! U_U