› Sviluppare funzionalita su Microsoft Office con VBA › tasto + o meno
-
AutoreArticoli
-
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 Subvorrei 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
Grazie mille, Perfetto
Grazie Grazie Grazie
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 SubCaro 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 SubGrazie 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
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.
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 Subin 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.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
Diciamo che per l'ignoranza me le merito tutte e 4 ma scelgo l'ultima
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()(oppure
Dim max_value As IntegerLong)perfettoooooooooo come sempre mi ero dimenticato la variabile dio mio che frana
grazieeee fraaaaaa
-
AutoreArticoli
