Ho analizzato due parti del mio programma:
- Caricamento di un nuovo foglio
- Formattazione del nuovo foglio.
Il passo successivo è quello di far apparire dei menu che riportino i nomi scritti nella lista, in modo da inserirli nei turni e fare i calcoli.
Voglio però provare a rifare le procedure che caricano i nomi della lista alla luce delle mie acquisizioni sulla denominazione dei Ranges di Excel.
Riprendo la routine:
Sub copiaMenu()
Dim k As Integer, z As Integer
k = 1
z = 4
Do While Sheets("Nascosto").Cells(k, 1) <> ""
ActiveSheet.Cells(z, 6).FormulaR1C1 = _
Sheets("Nascosto").Cells(k, 1).FormulaR1C1
ActiveSheet.Cells(z, 7).FormulaR1C1 = _
Sheets("Nascosto").Cells(k, 2).FormulaR1C1
k = k + 1
z = z + 1
Loop
With ActiveSheet
With .Cells(3, 6)
.Interior.ColorIndex = 6
.FormulaR1C1 = "NOME"
.HorizontalAlignment = xlCenter
End With
With .Cells(3, 8)
.Interior.ColorIndex = 8
.FormulaR1C1 = "GIORNO"
End With
With .Cells(3, 9)
.Interior.ColorIndex = 5
.Font.ColorIndex = 2
.FormulaR1C1 = "NOTTE"
End With
.Columns(6).ColumnWidth = 26
With .Columns(7)
.ColumnWidth = 6
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
With .Columns(8)
.ColumnWidth = 6
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
End With
End Sub
Innanzitutto la denominazione della routine stessa è confusiva, in quanto quello che io copio non è un menu ma una lista, un elenco.Rivediamo un po' di convenzioni di denominazione, per evitare la confusione...
Il foglio "Nascosto" dove sta memorizzata la lista di nomi lo chiamiamo foglio nascosto o anche archivio;
La lista di nomi la chiamiamo elenco dei nomi o lista dei nomi;
Il foglio con il calendario, dove la lista dei nomi viene copiata dal foglio nascosto, lo chiamiamo foglio calendario;
La lista dei nomi ricopiata sul foglio calendario la chiamiamo lista nomi del mese.
Ora rinominiamo la lista dei nomi!
Non ricordo bene la sintassi dell'aggiunta di nomi: carico una cartella di lavoro per ricavarmela da una macro...
ActiveWorkbook.Names.Add Name:="CampoDiCelle", RefersToR1C1:= _
"=Foglio1!R1C6:R10C6"
Cerchiamo di analizzarla per ricordarla meglio.Innanzitutto bisogna aggiungere un nome alla lista dei nomi
ActiveWorkbook.Names.AddQuindi si specifica il nome:
Name:="CampoDiCelle"E poi c'è la parte relativa al campo di celle selezionato:
RefersToR1C1:="=Foglio1!R1C6:R10C6".Di questo bisogna stare attenti a mettere un altro segno uguale prima del nome del foglio, fra virgolette.
Inseriamo il procedimento!
Ho rinominato più correttamente la routine copiaLista anziché copiaMenu.
Sub copiaLista()
Dim k As Integer, z As Integer
k = 1
z = 4
Do While Sheets("Nascosto").Cells(k, 1) <> ""
ActiveSheet.Cells(z, 6).FormulaR1C1 = _
Sheets("Nascosto").Cells(k, 1).FormulaR1C1
ActiveSheet.Cells(z, 7).FormulaR1C1 = _
Sheets("Nascosto").Cells(k, 2).FormulaR1C1
k = k + 1
z = z + 1
Loop
With ActiveSheet
With .Cells(3, 6)
.Interior.ColorIndex = 6
.FormulaR1C1 = "NOME"
.HorizontalAlignment = xlCenter
End With
With .Cells(3, 8)
.Interior.ColorIndex = 8
.FormulaR1C1 = "GIORNO"
End With
With .Cells(3, 9)
.Interior.ColorIndex = 5
.Font.ColorIndex = 2
.FormulaR1C1 = "NOTTE"
End With
.Columns(6).ColumnWidth = 26
With .Columns(7)
.ColumnWidth = 6
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
With .Columns(8)
.ColumnWidth = 6
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
End With
End Sub
Modifichiamo...Questo è il codice che rinomina le liste "Lista dei Nomi" e "Lista dei Nomi del Mese":
ActiveWorkbook.Names.Add Name:="ListaNomi", RefersToR1C1:="=Nascosto!C1:C2"
ActiveWorkbook.Names.Add Name:="ListaNomiMese", RefersToR1C1:="=C6:C7"
Ho verificato il funzionamento, essendo ancora inesperto di questa pratica, inserendo provvisoriamente comandi che modificassero il colore delle celle di un range...Adesso devo copiare i nomi da una lista all'altra.
Questo è il codice originario:
Dim k As Integer, z As Integer
k = 1
z = 4
Do While Sheets("Nascosto").Cells(k, 1) <> ""
ActiveSheet.Cells(z, 6).FormulaR1C1 = _
Sheets("Nascosto").Cells(k, 1).FormulaR1C1
ActiveSheet.Cells(z, 7).FormulaR1C1 = _
Sheets("Nascosto").Cells(k, 2).FormulaR1C1
k = k + 1
z = z + 1
Loop
che, definiti i punti di inizio delle due liste, k per quella del foglio Nascosto e z per quella del Mese, Procede, finché il contenuto di una cella della Lista dei Nomi non è nullo, a inserire nella Lista dei Nomi del Mese il valore della cella k della colonna 1 nella cella z della colonna 1 il valore trovato nella lista dei nomi; quindi scorre in avanti i due indici k e z.Modifichiamola con i nomi:
Dim k As Integer, z As Integer
k = 1
z = 4
Do While Range("ListaNomi").Cells(k, 1) <> ""
Range("ListaNomiMese").Cells(z, 1).FormulaR1C1 = _
Range("ListaNomi").Cells(k, 1).FormulaR1C1
Range("ListaNomiMese").Cells(z, 2).FormulaR1C1 = _
Range("ListaNomi").Cells(k, 2).FormulaR1C1
k = k + 1
z = z + 1
Loop
e funziona! Il vantaggio è di avere un codice molto più leggibile che evita evoluzioni cervellotiche e confusive diminuendo le possibilità di errore.Il resto è formattazione della tabella della Lista Nomi del Mese, che magari vedrò successivamente...
Nessun commento:
Posta un commento