You are here:Home-Domande su Excel VBA e MACRO-errore di runtime 13
errore di runtime 132020-08-12T13:34:35+02:00

Home Forum Domande su Excel VBA e MACRO errore di runtime 13

Visualizzazione 11 filoni di risposte
  • Autore
    Post
    • Avatarferrotel
      Partecipante
        Post totali: 4

        Buongiorno, è da molto che non vi scrivo. Sto cercando di riscrivere un programma per il calcolo dello stipendio (sono un ferroviere).

        Mi sono accorto di un problema causato da una routine in vba trovata su internet che mi mette in maiuscolo la prima lettera nella colonna C.  Spiego meglio la routine è questa:

        Private Sub Worksheet_Change(ByVal Target As Excel.Range)

        Dim InizMaiusc As Long
        InizMaiusc = 3    ‘Colonna C “Turno”  è la terza Colonna
        If Target.Column = InizMaiusc Then
        Application.EnableEvents = False
        Target.Value = Application.WorksheetFunction.Proper(Target.Value)
        Application.EnableEvents = True
        End If

        Il problema è che se seleziono con il mouse  piu nomi nella colonna C e li cancello con il tasto”Canc” della tastiera, il VBA mi genera un errore di runtime 13, se invece cancello un nome alla volta tutto funziona normalmente. Inoltre se per cancellare Tutti i dati del foglio uso il tasto apposito che richiama la sub “CancellodatiFoglio” non riscontro nessun errore.

        Premetto che non sono molto esperto con il VBA ma vorrrei capire il perchè di questo errore e come risolverlo. Vorrei anche mettere una sub che mi gestisca questi errori in modo da non bloccare il programma.

        allego il file del mio progetto:

        https://www.dropbox.com/s/h75uhbqk5k6kuwr/Progetto%20zero%2B%2B.xlsm?dl=0

        Grazie.

      • AvatarKris_9951
        Partecipante
          Post totali: 169

          Salve Ferrotel!

          Prova così. Sostituisci quel codice con questo:

           

          Private Sub Worksheet_Change(ByVal Target As Excel.Range)

          Dim InizMaiusc As Long

          InizMaiusc = 3    ‘Colonna C “Turno”  è la terza Colonna

          If Selection.Cells.Count = 1 Then
          If Target.Column = InizMaiusc Then
          Application.EnableEvents = False
          Target.Value = Application.WorksheetFunction.Proper(Target.Value)
          Application.EnableEvents = True
          End If
          End If

           

          Fai sapere (se vuoi).

          Alla prossima! :bye: :good:

        • Avatarferrotel
          Partecipante
            Post totali: 4

            Grazie :-) , adesso sembra funzionare bene.

            praticamente con

            if Selection.Cells.Count = 1 Then

            controlla che ci sia una sola selezione prima di eseguire il resto delle istruzioni ?

             

          • AvatarKris_9951
            Partecipante
              Post totali: 169

              Esattamente.

              È un modo spartano ma funzionante 😉👍

            • sidsid
              Moderatore
                Post totali: 752

                if Selection.Cells.Count = 1 Then

                Usa l’argomento Target :P

              • AvatarKris_9951
                Partecipante
                  Post totali: 169

                  Salve Maestro Sid! :bye:

                  Quindi:

                  If Target.Cells.Count = 1

                  Corretto?

                • Avatarferrotel
                  Partecipante
                    Post totali: 4

                    Buongiorno  Sid, non riesco a comprendere la tua osservazione ne sò davvero poco di vba.

                    mi sembra di capire che la sub in oggetto si può scrivere in maniera diversa, magari più logica?

                    • AvatarKris_9951
                      Partecipante
                        Post totali: 169

                        Ciao Ferrotel,

                        il Maestro Sid è un vero fanatico della sintassi.

                        Credo che lui mi abbia suggerito di usare l’argomento Target anzichè Selection.

                        Il risultato è il medesimo infatti se scrivi:

                        If Target.Cells.Count = 1 Then

                        non cambia nulla ai fini del risultato finale ma dal momento che l’evento Change dell’oggetto Worksheet ha già di suo l’argomento Target (ovvero il Range che viene modificato e che quindi scatena l’evento stesso), lui suggerisce giustamente di utilizzarlo.

                        Credo che con il suo intervento abbia voluto dire questo (credo ;-)   )

                    • sidsid
                      Moderatore
                        Post totali: 752

                        Credo che con il suo intervento abbia voluto dire questo (credo   )

                        Credi bene👌

                      • AvatarKris_9951
                        Partecipante
                          Post totali: 169

                          Credi bene👌

                          Allora vuol dire che qualcosa l’ho imparata 😂😂

                        • Zer0KelvinZer0Kelvin
                          Partecipante
                            Post totali: 9

                            Ciao a tutti.

                            il Maestro Sid è un vero fanatico della sintassi.

                            Nient’affatto.

                            In generale, non c’è nulla che garantisca che target e selection corrispondano sempre.

                            Ti propongo un semplice esperimento:

                            – inserisci un pulsante e associagli questo codice

                            Sub Pulsante1_Click()
                            Range(“A1”) = Range(“A1”) + 1
                            End Sub

                            -inserisci questo codice nel foglio

                            Private Sub Worksheet_Change(ByVal Target As Range)

                            MsgBox Selection.Address
                            MsgBox Target.Address

                            End Sub

                            Adesso seleziona un’area a piacere e clicca sul pulsante, noterai che target e selection non corrispondono.

                            • AvatarKris_9951
                              Partecipante
                                Post totali: 169

                                Salve Zer0Kelvin,

                                grazie per il tuo intervento  :bye:

                                 

                                Ho fatto il Test ed effettivamente non corrispondono (ovviamente capendo anche il perchè).

                                Quindi, se non sbaglio, in casi analoghi a questo a maggior ragione va usato Target come suggerito da Sid anzichè Selection perchè bisogna far riferimento solo alle celle che vengono modificate a prescindere dalla selezione corrente.

                                Poi sono stato io ad interpretare il suggerimento di Sid solo una questione di corretta sintassi l’uso di uno piuttosto che l’altro ed invece dietro quel suggerimento c’era molto altro ovvero quello che tu hai appena specificato.

                            • Zer0KelvinZer0Kelvin
                              Partecipante
                                Post totali: 9
                              • Avatarferrotel
                                Partecipante
                                  Post totali: 4

                                  Grazie per le spiegazioni!

                                  un ultima cosa sto tentando di inserire [risolto] ma senza successo, sono andato nella sezione come fare e quando clicco su modifica topic mi dice che non ho l’autorizzazione per farlo.

                              Visualizzazione 11 filoni di risposte
                              • Devi essere connesso per rispondere a questo topic.