Davide ha una cartella di lavoro che contiene 53 fogli di lavoro. Il primo foglio di lavoro è denominato “Master” e contiene dati nell’intervallo B1:B52. Vorrebbe, mediante una macro, copiare la cella B1 nella cella A2 del Foglio2, la cella B2 nella cella A2 del Foglio3, la cella B3 nella cella A2 del Foglio4, ecc. Davide non riesce a capire il modo migliore per ottenere questo risultato.
Per comprendere meglio come affrontare questa attività, è utile (anzi, fondamentale) comprendere come vengono gestiti i singoli fogli di lavoro in VBA. La parte fondamentale è che ogni foglio di lavoro fa parte di una collezione di fogli di lavoro. Ciò significa che ogni foglio di lavoro ha un nome e ognuno ha un valore di indice che denota la sua posizione all’interno della collezione Worksheets. Esiste una corrispondenza iniziale tra il nome del foglio di lavoro e la posizione dell’indice all’interno della collezione Worksheets, ma questo può facilmente perdersi.
Ad esempio, quando crei per la prima volta una cartella di lavoro, in genere conterrà uno o più fogli di lavoro denominati, abbastanza genericamente, Foglio1, Foglio2, Foglio3 e così via. Questi corrisponderanno ai numeri di indice 1, 2, 3 e così via nella collezione Worksheets. È questa corrispondenza iniziale tra il nome del foglio di lavoro (Foglio1) e il valore di indice (1) che può creare confusione. Questo perché quando si rinominano i fogli di lavoro e, soprattutto, si modifica l’ordine del foglio di lavoro, la relazione tra il nome del foglio di lavoro e il valore dell’indice può sembrare, beh, capricciosa.
Supponiamo che la cartella di lavoro di Davide sia stata creata con Foglio1, Foglio2 e Foglio3. Subito dopo, aggiunge un foglio di lavoro prima di Foglio1 (a sinistra di Foglio1 nelle schede dei fogli di lavoro) e lo chiama Master. A questo punto, Master ha un valore di indice nella collezione Worksheets di 1, Foglio1 ha un valore di indice di 2, Foglio2 ha un valore di indice di 3 e Foglio3 ha un valore di indice di 4. I valori di indice nella collezione Worksheets corrispondono sempre all’ordine dei fogli di lavoro come mostrato nelle schede dei fogli di lavoro.
Perché questo è importante? Perché quando fai riferimento a un foglio di lavoro in una macro, puoi farlo utilizzando il valore di indice nella collezione Worksheets oppure puoi farlo utilizzando il nome effettivo assegnato al foglio di lavoro. Ad esempio, puoi fare riferimento al foglio di lavoro “Master” utilizzando quanto segue:
Worksheets("Master")
Con tutto questo in mente, se il tuo foglio di lavoro Master è il primo nella cartella di lavoro e vuoi inserire i valori nei successivi 52 fogli di lavoro, da sinistra a destra nella cartella di lavoro, puoi usare questa macro molto semplice:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
La macro utilizza sia il metodo del valore dell’indice per fare riferimento ai fogli, sia il metodo del nome, per il foglio di lavoro “Master”. Avresti potuto facilmente utilizzare il metodo del valore dell’indice per entrambi i riferimenti:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
Oppure, se preferisci, potresti ragionare in maniera un po’ più complicata e scorrere le celle del foglio di lavoro “Master” e usarlo come un modo per determinare dove posizionare le informazioni:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
Infine, potresti considerare se vuoi davvero adottare gli approcci discussi finora. Il problema è che i valori copiati nella cella A2 in ciascuno degli altri fogli di lavoro sono statici, non cambiano. Per aggiornare i valori (se i valori in B1:B52 nel foglio di lavoro principale cambiano), dovrai ricordarti di eseguire nuovamente la macro.
La soluzione, ovviamente, è inserire delle formule nella cella A2 su ciascuno dei fogli di lavoro non principali. Le formule su ciascuno dei primi tre fogli di lavoro sarebbero simili a questa:
=Master!B1 =Master!B2 =Master!B3
Ovviamente, inserire quelle formule in tutti i 52 fogli di lavoro potrebbe essere noioso, dispendioso in termini di tempo e soggetto a errori. Pertanto, potresti utilizzare una macro per posizionare tutte le formule, utilizzando una variazione delle macro già discusse:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
Il risultato è che tutte le formule sono dove ti aspetti e i risultati visualizzati in A2 su ogni foglio di lavoro non sono più statici.