› Sviluppare funzionalita su Microsoft Office con VBA › copia valore cella e non la formula
-
AutoreArticoli
-
Salve a tutti
Sono un principiante di questo nuovo mondo, fino ad ora ho sempre cercato di arrangiarmi senza disturbare nessuno ma ora ho un problema del quale cercando in giro non sono riuscito a trovare la soluzione.
vorrei sapere se è possibile tramite codice VBA, copiare il risultato di una cella contenente una formula che come risultato da un numero, senza copiare la formula e al variare del risultato, cambia automaticamente anche la cella dove viene copiato il valore.
per semplificare, se in A1, ho una formula che mi da come risultato 1, questo (cioè 1) deve essere copiato in B1 senza che venga copiata anche la formula e al variare del risultato della formula di A1 venga copiato automaticamente nella cella B1.
In giro ho trovato questo codice:
Sub copia()
Range("A1").Select
Selection.Copy
Range("B1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End SubLa macro funziona correttamente, ma al variare del risultato di A1 non copia automaticamente il risultato in B1 se non lancio "manualmente" la macro.
Come potrei fare?
Grazie per la risposta
Di solito non serve preselezionare una cella per agire su di essa. Quindi i vari .Select si possono omettere.
Alla fine a te dovrebbe bastare una cosa così:
Range("B1").Value = [A1]
che immette e consolida nella cella B1 il valore calcolato della cella A1.
Premesso questo, per far sì che la faccenda sia "automagica" devi pensare a quando vuoi che succeda questo aggiornamento: ogni tot secondi? ogni volta che cambi il foglio? ogni volta che selezioni una cella diversa? ogni volta che modifichi una cella? ogni volta che salvi o stampi? il concetto è che devi intercettare l'evento che ti interessa e da lì scatenare il codice testè visto.
al variare del risultato di A1 non copia automaticamente il risultato in B1...
pare quindi che l'evento sia la modifica della cella.. o meglio la modifica del valore calcolato nella cella.. (ho scoperto che è sostanziale la differenza.. 🙂 Quindi nell'esempio specifico dovrebbe bastare questo, giusto VF?
Private Sub Worksheet_Calculate() Dim MyRange As Range Set MyRange = Range("A1") If Not MyRange Is Nothing Then Range("B1").Value = [A1] 'Call copia nel caso si volesse eseguire la macro "copia()" End If End Sub
dovrebbe bastare questo
Penso che vada bene anche questa proposta (ma credo superfluo il test If not MyRange is nothing).
Una cosa importante è invece disabilitare la gestione degli eventi (con Application.EnableEvents = False) prima di modificare la cella e riattivarla prima di uscire dalla procedura, altrimenti si innesca un loop infinito che finisce inevitabilmente a provocare errore di spazio dello stack di memoria esaurito.
Grazie ragazzi siete stati fantastici!!!
Grazie mille!!
Comunque non ho capito a cosa possa servire una macro del genere al posto della formula, se si tratta di un esercizio per imparare va bene, altrimenti mi sembra inutile.
Magari può servirgli per impostare un orologio che si aggiorna, se metto =ADESSO() in A1, in B1 mi dovrei trovare un aggiornamento costante.
-
AutoreArticoli