converti carattere in maiuscolo



  • converti carattere in maiuscolo
    di Johnny (utente non iscritto) data: 04/06/2017 12:22:43

    salve ho il seguente codice che converte il testo digitato in C8 in maiuscolo e funziona,
    il problema sorge se cancello il testo digitato in C8 mi da errore come di run-time '13'
    allego il codice
     
    Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not (Application.Intersect(Target, Range("C8")) Is Nothing) Then
    With Target
    If Not .HasFormula Then
    .Value = UCase(.Value)
    End If
    End With
    End If
    End Sub
    



  • di alfrimpa data: 04/06/2017 12:35:42

    Ciao Johnny

    In questo caso penso che tu possa risolvere inserendo un On Error Resume Next al secondo rigo della macro.

    Potrebbe andar bene anche un'istruzione del tipo

    If target.Value = "" Then Exit Sub

    che esce dalla macro se si cancella la cella C8.

    Alfredo





  • di Johnny (utente non iscritto) data: 04/06/2017 13:38:44

    ciao alfrimpa ho provato con If target.Value = "" Then Exit Sub
    ma mi da errore di runtime forse sbaglio qualche passaggio



  • di patel data: 04/06/2017 15:46:51

    prova così
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$C$8" Then Exit Sub
    If Target = "" Then Exit Sub
    Target.Value = UCase(Target.Value)
    End Sub






  • di Johnny (utente non iscritto) data: 04/06/2017 20:28:28

    ciao patel ho provato il codice, adesso funziona, solo che ho notato che quando parte la runtime e cambia il testo in maiuscolo alla fine della runtime cioè a end sub, invece di terminare la runtime , riparte dal primo rigo e la esegue senza fermarsi, ho modificato in questo modo, e sembra funzionare, c'è qualche altro sistema?
    Allego il codice dai un occhiata e fammi sapere.
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$C$8" Then Exit Sub
    Application.EnableEvents = False
    If Target = "" Then Exit Sub
    Target.Value = UCase(Target.Value)
    Application.EnableEvents = True
    End Sub



  • di patel data: 04/06/2017 20:56:44

    credo che sia il modo corretto, non ci avevo fatto caso





  • di scossa data: 05/06/2017 10:14:01

    cit. patel: "... credo che sia il modo corretto"

    Ciao,

    a parte che gli exit sub sparsi per il codice rendono difficile seguirne il flusso, c'è un errore di fondo: se il target è la cella C8 gli eventi vengono disabilitati, ma se il contenuto è stato cancellato (.Value="") gli eventi restano disabilitati.

    Sotto trovi un modo per risolvere.

    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)
      With Target
        If .Address = "$C$8" Then
          If .Value <> "" Then
            Application.EnableEvents = False
            .Value = UCase(.Value)
            Application.EnableEvents = True
          End If
        End If
      End With
    End Sub



  • di patel data: 05/06/2017 10:57:53

    Grazie scossa, non avevo fatto caso alla posizione di Application.EnableEvents = False





  • di Johnny (utente non iscritto) data: 05/06/2017 12:37:21

    grazie per l'aiuto