lunedì 22 settembre 2014

Denominazione di tutti i campi del programma

Ho fatto tutta una rivoluzione per quanto riguarda la denominazione dei ranges nel foglio Calendario.
Con questa nomino i campi del Calendario e la Lista Nomi del foglio Nascosto:
Sub nominaCampi()
    ActiveWorkbook.Names.Add Name:="ListaNomi", RefersTo:="=Nascosto!" & NomeRangeMisurato(1, 1, 1, 2, Sheets("Nascosto"), "")
    ActiveWorkbook.Names.Add Name:="TurnoGiorno", RefersTo:="=" & NomeRangeMisurato(5, 1, 2, 2, ActiveSheet, "")
    ActiveWorkbook.Names.Add Name:="Reparto", RefersTo:="=" & NomeRangeMisurato(5, 1, 3, 3, ActiveSheet, "")
    ActiveWorkbook.Names.Add Name:="TurnoNotte", RefersTo:="=" & NomeRangeMisurato(5, 1, 4, 4, ActiveSheet, "")
End Sub


Con questa, poi, una volta copiati i nomi dalla Lista Nomi del foglio Nascosto, nomino i ranges Lista Nomi Mese, Lista Reparti, Numeri Giorni, Numeri Notti (ossia, per gli ultimi due, le celle dove vengono segnati i turni diurni (solo festivi) e quelli notturni)
Sub copiaLista()
    Dim k As Integer, z As Integer
    z = 15 '(posizione iniziale della lista dei nomi del mese)
    For k = 1 To Range("ListaNomi").Rows.Count
        ActiveSheet.Cells(z, 6).FormulaR1C1 = Range("ListaNomi").Cells(k, 1).FormulaR1C1
        z = z + 1
    Next k
    ActiveWorkbook.Names.Add Name:="ListaNomiMese", RefersTo:="=" & Range(Cells(15, 6), Cells(z - 1, 6)).Address(True, True)
    Griglia Range("ListaNomiMese")
    
    ActiveWorkbook.Names.Add Name:="ListaReparti", RefersTo:="=" & Range(Cells(15, 7), Cells(z - 1, 7)).Address(True, True)
    Griglia Range("ListaReparti")
    Range("ListaReparti").Interior.Color = RGB(100, 255, 200)

    ActiveWorkbook.Names.Add Name:="NumeriGiorni", RefersTo:="=" & Range(Cells(15, 8), Cells(z - 1, 8)).Address(True, True)
    Griglia Range("NumeriGiorni")
    Range("NumeriGiorni").Interior.Color = RGB(200, 255, 255)
    
    ActiveWorkbook.Names.Add Name:="NumeriNotti", RefersTo:="=" & Range(Cells(15, 9), Cells(z - 1, 9)).Address(True, True)
    Griglia Range("NumeriNotti")
    Range("NumeriNotti").Interior.Color = RGB(200, 100, 255)
    
    
    With ActiveSheet
        With .Cells(Range("ListaNomiMese").Row - 1, 6)
            .Interior.ColorIndex = 6
            .FormulaR1C1 = "NOME"
            .HorizontalAlignment = xlCenter
        End With
        With .Cells(Range("ListaNomiMese").Row - 1, 7)
            .Interior.ColorIndex = 8
            .FormulaR1C1 = "REPARTO"
        End With
        With .Cells(Range("ListaNomiMese").Row - 1, 8)
            .Interior.ColorIndex = 8
            .FormulaR1C1 = "GIORNO"
        End With
        With .Cells(Range("ListaNomiMese").Row - 1, 9)
            .Interior.ColorIndex = 5
            .Font.ColorIndex = 2
            .FormulaR1C1 = "NOTTE"
        End With
        .Columns(6).ColumnWidth = 26
        Exit Sub
        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


Mi rendo conto che per il foglio calendario, nella routine nominaCampi, non ho denominato il range dei giorni del mese.
Presto fatto:
Sub nominaCampi()
    ActiveWorkbook.Names.Add Name:="GiorniDelMese", RefersTo:="=" & NomeRangeMisurato(5, 1, 1, 1, ActiveSheet, "")
    ActiveWorkbook.Names.Add Name:="ListaNomi", RefersTo:="=Nascosto!" & NomeRangeMisurato(1, 1, 1, 2, Sheets("Nascosto"), "")
    ActiveWorkbook.Names.Add Name:="TurnoGiorno", RefersTo:="=" & NomeRangeMisurato(5, 1, 2, 2, ActiveSheet, "")
    ActiveWorkbook.Names.Add Name:="Reparto", RefersTo:="=" & NomeRangeMisurato(5, 1, 3, 3, ActiveSheet, "")
    ActiveWorkbook.Names.Add Name:="TurnoNotte", RefersTo:="=" & NomeRangeMisurato(5, 1, 4, 4, ActiveSheet, "")
End Sub
Mi rendo conto che con il codice che ho creato risulta facilissimo denominare ranges dopo aver preso le misure, a tutto vantaggio della chiarezza della programmazione e della leggibilità del codice.

Nessun commento:

Posta un commento