Login Registrati
Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
  • Autore
    Articoli
  • #43658 Score: 0 | Risposta

    FROST220684
    Partecipante

      Ciao a tutti,

      ho una cella a cui aggiungo e sottraggo tramite tasto + o - usando questo codice: 

      Option Explicit
      
      Sub tastopiuad()
      Dim wb1 As Workbook
      
      Set wb1 = ThisWorkbook
      With wb1.Worksheets("Input")
      .Range("B8").Value = .Range("B8").Value + 1
      End With
      End Sub
      
      Sub tastomenoad()
      Dim wb1 As Workbook
      
      Set wb1 = ThisWorkbook
      With wb1.Worksheets("Input")
      .Range("B8").Value = .Range("B8").Value - 1
      End With
      End Sub

      vorrei però che quando arrivo allo zero il dato venga proprio cancellato (nel senso invece di comparire zero non ci deve essere scritto nulla)

      Come posso fare?

       

      Grazie a tutti dell'aiuto

      #43663 Score: 1 | Risposta

      Raffaele53
      Partecipante
        24 pts

        Prova

        Sub tastomenoad()
        Dim wb1 As Workbook
        If Worksheets("Input").Range("B8").Value = "" Then Exit Sub
        Set wb1 = ThisWorkbook
        With wb1.Worksheets("Input")
        .Range("B8").Value = .Range("B8").Value - 1
        If .Range("B8").Value = 0 Then .Range("B8").Value = ""
        End With
        Set wb1 = Nothing
        End Sub
        #43664 Score: 0 | Risposta

        FROST220684
        Partecipante

          Grazie mille, Perfetto

           

          Grazie Grazie Grazie

          #43666 Score: 1 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            Ciao Fabrizio, è da un po' che non ci sentiamo 🙂

            Il foglio Input è nello stesso Workbook? perfetto non serve referenziarlo e quindi risparmi un oggetto (con tutto il lavoro di istanzia, assegna e annienta).
            Nel blocco With fai riferimento a Range("B8"): benissimo, includilo nel blocco With e risparmi anche questa digitazione.
            Fai un test sul valore uguale a zero? Ecco qui per te l'istruzione IIf che valuta una condizione e condensa un Then...Else in una sola riga.
            Infine non serve il test sulla cella vuota: se nella IIf testiamo anche il valore minore di zero, ecco risparmiata un'altra istruzione.

            Insomma una piccola ottimizzazione con un grosso saluto per te 🙂

            Sub tastomenoad()
                With Worksheets("Input").Range("B8")
                    .Value = IIf(.Value - 1 <= 0, "", .Value - 1)
                End With
            End Sub
            #43684 Score: 0 | Risposta

            FROST220684
            Partecipante

              Caro Francesco,

              E' sempre un piacere imparare da te e dato che nel mio piccolo tento sempre di imparare qualcosina ti direi che alla fine posso ottimizzare allo stesso modo il tasto + in questo modo (potrebbe esserci qualcosa in più ma di funzionare funziona - secondo me quella parte <= 0, "", .Value + 1) non serve a molto ma va in debug se la elimino, anche perche con il tasto + non andrò mai allo zero ma sempre a salire.

              Sub tastopiuad()
              With Worksheets("Input").Range("B8")
                      .Value = IIf(.Value + 1 <= 0, "", .Value + 1)
                  End With
              End Sub

              Grazie come sempre dei tuoi preziosi consigli ti mando un abbraccio grande e non ti ho disturbato ma quando vuoi, puoi e ti andrà ci sentiamo. 

              Per adesso sto ottimizzando solo cose piccoline come vedi   

              Grazie chiaramente a Raffaele53 che mi ha cmq risolto il problema

              #43687 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                Ma direi che se questa routine aumenta il valore, non andrà sotto lo zero; in astratto potresti avere un valore max da non superare e allora devi modificare  la logica accordingly:

                'esempio non posso superare il valore di cinque miliardi:
                max_value = 5 000 000 000
                .Value = IIf(.Value + 1 > max_value, "", .Value + 1)

                Sentirci è sempre possibile e sempre gradito, ma la mia testa in questo periodo non è molto libera.

                #43690 Score: 0 | Risposta

                FROST220684
                Partecipante

                  mmm....non so perchè mi da errore sul max_value: 

                  Sub tastopiuad()
                  With Worksheets("Input").Range("B8")
                  max_value = 7
                  .Value = IIf(.Value + 1 > max_value, "", .Value + 1)
                      End With
                  End Sub

                  in allegato immagine di errore.

                  Ci sentiremo sicuramente i lavori che abbiamo in cantiere possono aspettare. ti abbraccio e grazie come sempre

                  Allegati:
                  You must be logged in to view attached files.
                  #43697 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    FROST220684 ha scritto:

                    non so perchè mi da errore sul max_value

                    "Variabile non definita".

                    Scegli un'opzione:
                    1- Ti picchio direttamente senza passare dal Via!
                    2- Prima ti insulto e poi ti picchio
                    3- Prendo un treno, vengo lì, ti insulto e poi ti picchio
                    4- Ti spiego con calma olimpica cosa succede, ti dico come rimediare e poi mi offri una birra

                    #43698 Score: 0 | Risposta

                    FROST220684
                    Partecipante

                      Diciamo che per l'ignoranza me le merito tutte e 4 ma scelgo l'ultima   

                      #43707 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        Hai inserito Option Explicit in testa al codice, cosa molto buona e giusta, ma non hai dichiarato la variabile "max_value" che perciò è sconosciuta all'interprete e quindi ti solleva errore.

                        Soluzione: dichiara la variabile a inizio Sub:

                        Sub tastopiuad()
                        Dim max_value As Integer
                        (oppure Long)

                        #43708 Score: 0 | Risposta

                        FROST220684
                        Partecipante

                          perfettoooooooooo come sempre mi ero dimenticato la variabile dio mio che frana

                           

                          grazieeee fraaaaaa

                        Login Registrati
                        Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
                        Rispondi a: tasto + o meno
                        Gli allegati sono permessi solo ad utenti REGISTRATI
                        Le tue informazioni: