Questo esempio mostra come sia possibile creare in automatico dei fogli di dettaglio da un elenco, collegarli all'originale e creare i link per potersi spostare velocemente da uno all'altro.
La macro, per ogni nome del range Nominativi del foglio Indice di cui non è presente una scheda di dettaglio:
- crea un nuovo foglio copiando dal foglio nascosto FoglioBase;
- imposta le formule per riportare il totale sul foglio indice e il nome sul foglio di dettaglio;
- crea i collegamenti ipertestuali per andare dal nome al folgio di dettaglio e da questo ritornare sull'indice.
La parte associata all'evento Change permette di far partire la macro in automatico ad ogni nuova aggiunta di un nome.
l'esempio completo é scaricabile da questo link:
Es349.xlsm (a questo link le info per
attivare le macro se risultano bloccate)
Il codice della macro:
Sub CreaFogliDaLista()
Set ShIndice =
ActiveSheet
Set Elenco =
Range("Nominativi")
Set FoglioBase =
Sheets("FoglioBase")
For Each Nome
In Elenco
If (Nome.Value <> "" And Nome.Hyperlinks.Count = 0)
Then
'Crea il foglio copiandolo da "FoglioBase"
FoglioBase.Copy After:=
Sheets(
Sheets.Count)
'trova il foglio appena creato (non viene creato per ultimo con i fogli nascosti)
i =
Sheets.Count
While (
Sheets(i).Name = FoglioBase.Name)
i = i - 1
Wend
Set ShNuovo =
Sheets(i)
'da il nome al foglio nuovo e lo rende visibile
'se esiste già il nome del foglio gli assegna 'nome 1,2,3'
If (
Not (MF_Foglio_Esiste(Nome.Value)))
Then
ShNuovo.Name = Nome.Value
Else
n = 2
Do While (MF_Foglio_Esiste(Nome.Value &
Str(n)))
n = n + 1
Loop
ShNuovo.Name = Nome.Value &
Str(n)
End If
ShNuovo.Visible = xlSheetVisible
ShNuovo.Activate
'Imposta la formula per il nome sul foglio creato
RifNome = Nome.
Address(False, False)
ShNuovo.
Range("C3").
Formula = "=" & ShIndice.Name & "!" & RifNome
'Imposta il link dal foglio dettaglio al foglio indice
ShNuovo.Hyperlinks.Add Anchor:=
Range("B1"),
Address:="", SubAddress:=ShIndice.Name & "!" & RifNome
'crea il link dal foglio indice al foglio di dettaglio
ShIndice.Hyperlinks.Add Anchor:=Nome,
Address:="", SubAddress:="
'" & ShNuovo.Name & "'!B7"
'imposta la formula per il totale delle ore sul foglio indice
ShIndice.
Range(RifNome).Offset(0, 1).
Formula = "=
'" & ShNuovo.Name & "'!E3"
End If
Next
ShIndice.Activate
End Sub
Verifica se il nome del foglio è già stato utilizzato
L'evento Change che permette di attivare la macro per i nuovi inserimenti nel range "Nominativi"
Gli esempi contenuti nel sito sono per uso personale, non é consentito l'uso professionale, commerciale o la riproduzione senza autorizzazione.