› Sviluppare funzionalita su Microsoft Office con VBA › tasto on/off
-
AutoreArticoli
-
Ciao a tutti, nel mio file excel ho un tasto collegato ad una macro che inserisce un numero all'interno di una cella. vorrei affinare tale macro rendendolo come un on/off. Ad esempio se premo il tasto e la cella è vuota metto 1. Se ripremo il tasto e la cella ha al suo interno il numero 1 lo cancello. il codice usato attualmente per inserire il numero 1 è questo:
Sub tastofedelta() Dim wb1 As Workbook Set wb1 = ThisWorkbook With wb1.Worksheets("Input") .Range("J27") = "1" End With End Subgrazie a tutti per l'aiuto
Suggerimento: cerca e utilizza XOR.

ciao
vecchio trentino
XOR ???????
è la funzione a livello formule che nessuno usa
e mi risulta servano due celle da comparare
non gli basta un misero IF........?
l'ho trovata però riesco solo a vederla come formula come la trasformo in codice
effettivamente io pensavo ad un misero if
ciao
c'è anche in VBA ma non capisco come applicarla
e si che a livello formula la conosco.....mai usata ma la conosco
(per me l'hanno fatta dopo una serata all'Oktoberfest)
l'if è semplice
`Sub tastofedelta() Dim wb1 As Workbook Set wb1 = ThisWorkbook With wb1.Worksheets("Input") If Range("J27") = 1 Then Range("J27") = 0 Else Range("J27") = 1 End If End With End Sub `effettivamente io pensavo ad un misero if

Sub tastofedelta() Dim wb1 As Workbook Set wb1 = ThisWorkbook With wb1.Worksheets("Input").Range("J27") .Value = .Value Xor 1 End With End SubGrazie mille ad entrambi, l'IF funziona correttamente!!!
Rispetto la mia domanda iniziale è modificato in questo modo:
Sub tastofedelta() Dim wb1 As Workbook Set wb1 = ThisWorkbook With wb1.Worksheets("Input") If Range("J27") = 1 Then Range("J27") = "" Else Range("J27") = 1 End If End With End Subho modificato solo la parte della zero per cancellare completamente il dato. Grazieeeee
ricorda che prima dell'ultima riga con "End Sub"
è sempre meglio rendere a Nothing le variabile Oggetto con
Set nome_oggetto = Nothingper me l'hanno fatta dopo una serata all'Oktoberfest

Rispetto la mia domanda iniziale è modificato in questo modo
Ottimo e allora visto che Xor non ti piace, adesso riscrivi tutto utilizzando l'istruzione IIf
ciao trentino velenoso
mi istruisci su XOR in vba
questa stringa
.Value = .Value Xor 1
se trovo 1 = FALSO
se trovo altro =VERO
è giusto?
Cercato in rete e trovato https://www.excelvba.it/forumexcel/codici-segreti-con-loperatore-xor/
Letto e provato, ma mi domandavo cosa centrava nel merito
se trovo 1 = FALSO
se trovo altro =VERO
è giusto?
No in realtà. Se le proposizioni sono entrambe vere o sono entrambe false il risultato è falso. Se sono diverse il risultato è vero. Questo concetto va applicato bit per bit nell'algebra booleana sottostante:
zero xor 1 = 0000 xor
0001 =
---------------------------
0001 cioè 1
1 xor 1 = 0001 xor
0001 =
---------------------------
0000 cioè zeroRiprendendo il codice di V_F si potrebbe aggiungere una riga IF secondo me:
Sub tastofedelta() Dim wb1 As Workbook Set wb1 = ThisWorkbook With wb1.Worksheets("Input").Range("J27") .Value = .Value Xor 1 If .Value = 0 Then .Value = "" End With End SubDa quello che leggo nella guida in linea, in modo molto semplice da spiegare, l'operatore XOR esegue un confronto logico su variabili Booleane o numeriche.
Restituisce True se le 2 variabili sono diverse
Restituisce False se le 2 variabili sono uguali
Il confronto può essere fatto anche bit per bit tenendo conto dei confronti dei vari numeri binari.
ah!
è la stessa cosa della formula allora.
pensavo prendesse un altro significato con il vba
so di essere testardo, ma mi hanno insegnato ad esserlo... anche quelli che di vba ne sanno più di me
possibile che nessununo suggerisca di rendere a Nothing le variabili Oggetto
che è una cosa che mi hanno insegnato quelli che tutti ritengono essere i maghi del vba?
credo di essere veramente "arrivato" e che per quanto si verifica nel Forum,
abbia fatto bene Patel a dedicarsi ad altro
Non lamentiamoci... e soprattutto cerchiamo di suggerire soluzioni "senza sbavature"
è la stessa cosa della formula allora.
Almeno c'è coerenza
comunque questo è terreno di scossa... lui fa colazione con pane e Boole ogni mattina.
possibile che nessununo suggerisca di rendere a Nothing le variabili Oggetto
In linea di massima sì, è una buona pratica e fai bene a dirlo e ribadirlo. Ma ha un vero significato solo per gli oggetti esterni all'applicazione in uso. Quando sei dentro una Excel Application e utilizzi costantemente gli oggetti di quello spazio, è poi Excel stesso che li annienta automaticamente (altrimenti dovresti annientare sempre ogni oggetto Range, Cell, Worksheet eccetera). La distruzione esplicita degli oggetti è benissimo farla quando ti avvali di oggetti creati con CreateObject (per l'esempio di late binding).
credo di essere veramente "arrivato" e che per quanto si verifica nel Forum,
abbia fatto bene Patel a dedicarsi ad altro
Non so cosa abbia fatto traboccare il tuo vaso, però mi dispiace che dici così. Non sappiamo poi se patel si stia dedicando ad altro per volontà o per altre cause quindi non supponiamo niente
possibile che nessununo suggerisca di rendere a Nothing le variabili Oggetto
ciao,
senza togliere niente al tuo autorevole parere,
se lo ritiene opportuno, gradirei sapere anche quello di Marco
comunque questo è terreno di scossa...
Una spiegazione abbastanza semplice riguardo a XOR l'ho scritta ne Il Gioco del Mese NIM , non la ricopio qui, ma andate alla parte 3 post del 18/07/2015 23:43:51.
Ma ha un vero significato solo per gli oggetti esterni all'applicazione in uso.
io direi che "il rischio maggiore viene dagli oggetti esterni .....", perché se si lavora aprendo più file excel chiudendoli in modo randomatico (come spesso avviene in ambito lavorativo) e riaprendone altri, un certo rischio c'è anche giocando in casa; quindi io preferisco distruggere, voi fate vobis
-
AutoreArticoli
