Sviluppare funzionalita su Microsoft Office con VBA copia valore cella e non la formula

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

    alex

      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 Sub

      La 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

       

       

      #12765 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        238 pts

        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.

        #12766 Score: 0 | Risposta

        vion
        Partecipante
          3 pts

          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
          #12771 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            238 pts

            vion ha scritto:

            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.

             

            #12772 Score: 0 | Risposta

            Alex

              Grazie ragazzi siete stati fantastici!!!

              Grazie mille!!

               

              #12773 Score: 0 | Risposta

              patel
              Moderatore
                50 pts

                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.

                #12778 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  238 pts

                  Magari può servirgli per impostare un orologio che si aggiorna, se metto =ADESSO() in A1, in B1 mi dovrei trovare un aggiornamento costante.

                Login Registrati
                Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
                Rispondi a: copia valore cella e non la formula
                Gli allegati sono permessi solo ad utenti REGISTRATI
                Le tue informazioni: