Elenco nomi con schede di dettaglio
Info
Esempi
Linguaggio
Librerie
Formule
Ultimi Inseriti

 Login

 Password

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:
  1. crea un nuovo foglio copiando dal foglio nascosto FoglioBase;
  2. imposta le formule per riportare il totale sul foglio indice e il nome sul foglio di dettaglio;
  3. 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
Function MF_Foglio_Esiste(NomeFoglio As String) As Boolean
  MF_Foglio_Esiste = False
  On Error Resume Next
  MF_Foglio_Esiste = Worksheets(NomeFoglio).Name = NomeFoglio
  On Error GoTo 0
End Function

L'evento Change che permette di attivare la macro per i nuovi inserimenti nel range "Nominativi"
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not (Application.Intersect(Target, Range("Nominativi")) Is Nothing) Then
    CreaFogliDaLista
  End If
End Sub



Gli esempi contenuti nel sito sono per uso personale, non é consentito l'uso professionale, commerciale o la riproduzione senza autorizzazione.
Per dubbi o domande potete scriverci a domande@macrofacili.it, sulla nostra pagina FB MacroFacili.it o sul gruppo FB Excel, macro e formule.
 

data4idea srls - PIva 01881000937 - info@data4idea.it