Attivare macro quando cambia valore cella
Excel esegue una macro basata sul valore della cella
Ho una grande cartella di lavoro con molti fogli di lavoro. Ogni foglio di lavoro contiene una combinazione di input e calcoli dell’utente e la maggior parte dei collegamenti a input o output su altri fogli di lavoro. La cartella di lavoro ha anche un modulo che contiene una serie di funzioni VBA personalizzate.
Sto cercando di cercare automaticamente una cella situata in un foglio di lavoro non selezionato/non attivo se l’utente cambia un valore sul foglio attivo che è collegato all’input per il calcolo sull’altro foglio che vorrei cercare. Un esempio:
La cella A1 del “Foglio7” contiene un numero che è una “ipotesi” del risultato di un calcolo basato sui valori nelle celle A2, A3 e A4 dello stesso foglio (esempio: A1 è il risultato fittizio di A2 + A3 + A4). Le celle A2, A3 e A4 sono collegamenti ai risultati di calcolo di altri tre fogli di lavoro. La cella A5, sul “Foglio7”, è il risultato effettivo di A2 + A3 + A4 e potrebbe non corrispondere al valore in A1. La cella A6 è la differenza tra il risultato calcolato in A6 e il valore in A1 e sto portando A6 a 0 per assicurarmi che il valore calcolato in A5 corrisponda sempre al valore “hard coded” in A1.
Il codice vba non viene eseguito quando la cella viene modificata da una formula
Di cosa ho bisogno: Una macro da attivare, chiamiamo la macro “MacroRuns”, ogni volta che la cella C3 restituisce un valore diverso da quello che ha attualmente, basato sulla sua FORMULA, NON basato sulla digitazione manuale di un valore diverso.
Il punto principale è – se avete intenzione di usare qualcosa di più di una semplice messagebox (MsgBox “Cell has changed.”) avete bisogno di aggiungere le seguenti linee sopra e sotto questa linea (altrimenti Excel si bloccherà costantemente a causa del continuo tentativo di fare lo stesso). Non chiedetemi perché, ma ho finalmente risolto il mio problema con questo. Quindi ecco le linee:
Eseguire la macro quando il valore della cella cambia in base alla formula
Un blog incentrato principalmente su Microsoft Excel, PowerPoint e Word con articoli che mirano a portare le tue capacità di analisi dei dati al livello successivo. Impara qualsiasi cosa, dalla creazione di dashboard all’automazione di compiti con il codice VBA!
Passiamo attraverso un esempio! Speriamo che ora tu abbia una sorta di comprensione concettuale dei gestori di eventi, ma come li usi nel mondo reale? Facciamo un esempio molto semplice che ci permetterà di eseguire del codice VBA ogni volta che la cella G7 contiene la parola “sì” sul nostro foglio di calcolo. Qui sotto ci sarà la nostra interfaccia dove Excel rivelerà uno scherzo se si digita la parola “Sì” nella casella vuota (cella G7).
Perché i miei eventi non vengono catturati? Molte persone disattivano il tracciamento degli eventi per velocizzare il loro codice VBA. Se fai affidamento sulla cattura degli eventi all’interno del tuo foglio di calcolo e non sembra funzionare, puoi eseguire il seguente comando nella finestra immediata (usa la scorciatoia Ctrl + g per rendere visibile questa finestra) all’interno dell’editor di Visual Basic: Application.EnableEvents = TrueGet The Example File Used In This ArticleA volte vedere le cose in azione può aiutare a imparare molto meglio che leggerle in un articolo. Ecco perché sto mettendo a vostra disposizione l’esempio che ho illustrato in questo articolo. La cartella di lavoro e il suo codice sono completamente sbloccati in modo da poter scavare e scoprire come funziona tutta la magia.Come sempre, per scaricare questo file di esempio è necessario essere un abbonato alla mia newsletter gratuita. Se fai clic sul pulsante verde qui sotto puoi facilmente iscriverti e ti verrà inviata via e-mail la password per accedere all’area riservata agli abbonati di questo sito web.
Eseguire la macro quando la cella è selezionata
Nel corso delle vostre pratiche VBA, potreste avere la necessità di eseguire macro quando un certo intervallo o cella cambia. In questo caso, per eseguire le macro quando viene effettuato un cambiamento in un intervallo di destinazione, usiamo l’evento di cambiamento. Gli eventi in VBA ci permettono di eseguire le macro quando si verifica un certo evento.
In questo esempio, voglio eseguire una macro/codice VBA quando viene effettuata una modifica nell’intervallo A2: A100 sul foglio 2. Per farlo, faccio doppio clic su foglio2 in project explorer. Si apre la pagina di codifica per quel foglio. Puoi cliccare con il tasto destro del mouse sul foglio e cliccare su visualizza codice per fare lo stesso.
Qui Intersect(Target, Range(“A2:A100”)) Is Nothing restituisce True se non viene effettuata alcuna modifica nel Range A2:A100. Abbiamo messo un operatore Not prima di questa dichiarazione che inverte l’output dato da “Intersect(Target, Range(“A2:A100″))”. Quindi, se non viene fatta alcuna modifica nell’intervallo A2:A100, l’espressione restituisce Falls e la sub TestEvent non riceve la chiamata. Se si effettua una modifica in qualsiasi cella nell’intervallo A2:A100, l’espressione restituisce True e l’evento si verifica. Ed è quello che succede qui.