sabato 20 settembre 2014

Parte seconda del mio programma: Sezione prima: preparazione alla formattazione del foglio.

La routine chiamata nella prima parte del programma, quella del caricamento del foglio, si compone di diverse routines chiamate in sequenza, che svolgono vari compiti:
  • Scrivere le intestazioni del foglio;
  • aggiungere le date per creare la pagina col calendario del mese;
  • aggiungere i bordi in modo da organizzare il tutto in una griglia;
  • aggiungere la scritta di coda.
Queste sono le parti che costruiscono la struttura del calendario del mese.
Ecco la prima routine che chiama tutte le altre, nel modulo che si occupa della formattazione del foglio, insieme alle variabili dichiarate per questo modulo:
Option Explicit
Dim Riga As Integer
Dim Colonna As Integer
Dim primaRiga As Integer
Dim primaColonna As Integer
Dim Mese As Integer
Dim Anno As Integer


Sub formattaFoglio(r As Integer, C As Integer, M As Integer, Y As Integer)

'inizializza le variabili colonna e riga, e ne copia i valori iniziali per preservarli, nelle
'variabili PrimaColonna e PrimaRiga

Riga = r
Colonna = C
Mese = M
Anno = Y
primaRiga = Riga
primaColonna = Colonna


scriviIntestazioni
    
aggiuntaDate

creazioneGriglia

scrittaDiCoda

copiaMenu

scorri

impostazioniStampa

End Sub
Focalizziamoci sulle variabili:
Inizialmente avevo l'idea di rendere facilmente modificabile la posizione del foglio da stampare all'interno del foglio di lavoro di Excel, quindi l'ho abbandonata, ma è residuato del codice relativo a quello scopo...
Volendo lo potrei anche eliminare, quel codice, dal momento che quella mi sembra un'idea inutile e buona solo a confondersi durante la programmazione.
Ho un modulo di variabili e costanti globali che sono queste:
Public Const Riga = 1
Public Const Colonna = 1
Public Const scartoTabella = 4
Public Const scartoMenu = 3
Public Bersaglio As Range
Public Const Centralina = "Foglio1"
Prendiamo in esame solo Riga e Colonna.
Con questo codice sarebbe facile cambiare posizione in quanto sarebbe sufficiente soltanto modificare la costante Riga e/o la costante Colonna per poi, dato un idoneo codice, spostare tutto l'apparato, ma dal momento che non voglio farlo più potrei eliminare tranquillamente le due costanti Riga e Colonna.
Queste però vengono usate nella prima routine, vista in precedenza, quando viene chiamata la routine formattaFoglio, in questo modo:
....

    formattaFoglio Riga, Colonna, Month(d), Year(d)  'formatta il foglio secondo lo schema


...
...che poi, essendo pubbliche, è anche un po' ridicolo passarle come parametri dal momento che la routine può vederle direttamente...

Dunque se elimino le costanti devo modificare la firma della routine formattaFoglio e la sua chiamata, dando per scontato che il valore di Riga e Colonna è fisso a 1.
Vediamo la dinamica in formattaFoglio:
Option Explicit
Dim Riga As Integer
Dim Colonna As Integer
Dim primaRiga As Integer
Dim primaColonna As Integer
Dim Mese As Integer
Dim Anno As Integer

Sub formattaFoglio(r As Integer, C As Integer, M As Integer, Y As Integer)

'inizializza le variabili colonna e riga, e ne copia i valori iniziali per preservarli, nelle
'variabili PrimaColonna e PrimaRiga

Riga = r
Colonna = C
Mese = M
Anno = Y
primaRiga = Riga
primaColonna = Colonna

...
Ecco: ho delle variabili locali del modulo formattazioneFoglio, il cui nome è uguale a quello delle costanti.
Quando le costanti vengono passate come parametro (? cosa inutile) queste variabili locali assumono il valore delle costanti, e quindi potranno essere cambiate di valore nel corso del modulo senza influenzare il valore base di Riga e Colonna mantenuto dalle costanti.
Ma io, dando per fissi Riga e Colonna uguali a 1, posso benissimo, tolte le costanti, uguagliare le variabili locali di questo modulo a 1.
Sub formattaFoglio(M As Integer, Y As Integer)



Riga = 1
Colonna = 1
Mese = M
Anno = Y
primaRiga = Riga
primaColonna = Colonna
e chiamare questa routine, ovviamente, dalla routine aggiungiFoglio, con:
formattaFoglio Month(d), Year(d)
...che funziona perfettamente (ho fatto la prova).
Adesso vediamo come va avanti questa routine:
...
Riga = 1
Colonna = 1
Mese = M
Anno = Y
primaRiga = Riga
primaColonna = Colonna
La variabile locale Mese viene eguagliata al parametro M e la variabile locale Anno viene eguagliata al parametro Y.
Con questi, la routine aggiungiFoglio passa il valore calcolato del mese e dell'anno di cui fare il calendario. Ricordo il codice:
formattaFoglio Month(d), Year(d)
...sarebbero mese e anno della data calcolata del mese successivo.

Quindi le variabili locali primaRiga e primaColonna vengono eguagliate alle variabili locali Riga e Colonna: anche questo è inutile dal momento che Riga e Colonna variabili locali sono date per uguali a 1, in quanto ogni volta che, nonostante Riga e Colonna si saranno modificate nel corso del modulo, per fare riferimento alla prima riga e alla prima colonna basterà mettere il numero 1.
Il codice diventa quindi questo:
Sub formattaFoglio(M As Integer, Y As Integer)

Riga = 1
Colonna = 1
Mese = M
Anno = Y

scriviIntestazioni
    
aggiuntaDate

creazioneGriglia

scrittaDiCoda

copiaMenu

scorri

impostazioniStampa

End Sub
Quindi, posti i punti di partenza riga e colonna e presi i parametri relativi alla data calcolata, si eseguono una per una tutte le routines che formattano il foglio.

Nessun commento:

Posta un commento