Thursday, August 30, 2007

Excel: VLookup + DSum insieme

Il problema del VLookup è che ritorna il primo valore che ritrova.
Il problema del DSum è che è necessario avere il range con i criteri.

La mia necessità è invece questa: fare la somma dei valori di una tabella che hanno il valore di ricerca (= valore prima colonna) uguale a quello indicato da me.
Ho creato questa UDF che consente di scandire la tabella e fare la somma dei valori della colonna indicata:
Parametri ricevuti:
- Lookup_Value = Valore da cercare
- Lookup_Table = Tabella dei valori (la prima colonna contiene la chiave di ricerca
- Column_Index = Colonna contenente i valori da sommare

Valore ritornato:
- Somma dei valori corrispondenti alla chiave passata
- Errore (#VALUE) (se il valore non è individuato)

Public Function TotRange(Lookup_Value As Variant, Lookup_Table As Range, Column_Index As Integer) As Variant
Dim riga As Integer
Dim tot
Dim trovato As Boolean
tot = 0
trovato = False
For riga = 1 To Lookup_Table.Rows.Count
If Lookup_Table.Cells(riga, 1) = Lookup_Value Then
trovato = True
tot = Lookup_Table.Cells(riga, Column_Index) + tot
End If
Next
If trovato Then
TotRange = tot
Else
TotRange = CVErr(10)
End If
End Function

Tuesday, August 07, 2007

Introduzione all'IDE di Delphi

Versione gratuita Turbo Explorer per Win32
Una volta avviato, l'IDE presenta sei zone distinte:
1. Menu e toolbar
2. Structure
3. Object Inspector
4. Project Manager
5. Tool Palette
6. L'area centrale

Descrizione delle zone
1. Menu e toolbar
Rappresenta, come per ogni programma Windows, la zona contenente l'insieme dei comandi e delle opzioni che è possibile usare all'interno di Delphi.
2. Structure
Contiene l'albero dell'attuale Form/Unit aperta. Per albero si devono intendere due cose distinte a seconda che si stia lavorando al disegno visuale della form oppure all'interno del codice. Nel primo caso sarà visualizzato l'insieme dei controlli visuali connessi tramite la relazione Parent; nel secondo caso sarà mostrata la struttura della unit del codice organizzata per categoria sintattica (funzioni, campi, etc.)
3. Object Inspector
Diviso in 2 zone contiene le proprietà e gli eventi che è possibile impostare per il componente selezionato sulla form. Da qui è possibile indicare il valore delle proprietà (nel caso di proprietà complesse esistono degli editor appositi) e degli eventi associati al componente. Da un evento si va direttamente alla finestra del codice tramite doppio click.
4. Project Manager
Rappresenta la struttura dei file del progetto. In neretto è indicato il progetto attivo. Possono essere mantenuti aperti più progetti all'interno dell'IDE e ciò risulta molto comodo durante lo sviluppo di applicazioni complesse che usano diversi moduli (dll o eseguibili).
5. Tool Palette
Contiene l'insieme degli elementi che è possibile creare. Se non è stato ancora creato alcun progetto contiene le voci che sono presenti anche all'interno del menù FileNewOther; se invece siamo sulla form contiene i componenti visuali che è possibile inserire nella form.
6. L'area centrale
All'avvio contiene la Welcome page, durante lo sviluppo contiene la grafica della form su cui stiamo lavorando, il codice associato alla form e l'History della form. Questi tre elementi sono visualizzabili uno alla volta selezionando il tab corrispondente.

Struttura di un semplice programma
Pur consentendo lo sviluppo di un insieme di programmi molto vasto (da un Web Service ad un servizio per Windows) generalmente Delphi viene usato per lo sviluppo di applicazioni VCL Form. In pratica queste applicazioni rappresentano programmi Windows (32 bit attualmente) costituiti da una o più finestre (forms) su cui sono collocati gli elementi della VCL (libreria dei componenti usata in Delphi) necessari alla realizzazione dell'interfaccia grafica. A ciascun elemento della interfaccia sono poi agganciati gli eventi necessari alla realizzazione della logica applicativa. Una volta creato un programma VCL Form, Delphi automaticamente crea i seguenti files:
- il file principale di progetto (visibile richiamando il menù contestuale View Source) dalla finestra del Project Manager o premendo Control + V una volta selezionato il nome del progetto;
- il file del codice associato alla form il cui nome è generalmente Unit1.pas
- il file contenente la definizione della form il cui nome è Unit1.dfm
In genere il file su cui si interviene maggiormente è il file Unit1.pas che conterrà tutto il codice associato ai componenti della Form1.
Nel caso che venga aggiunta una nuova form al programma, Delphi creerà due nuovi file dal nome Unit2 .pas e Unit2.dfm.

All'interno del file Unitn.pas Delphi colloca il codice Object Pascal necessario alla definizione della form. Ricordiamo che Delphi sfrutta l'Object Pascal come linguaggio di programmazione (estensione ad oggetti del Pascal). Per questo, ogni form che viene creata è derivata dalla classe della VCL TForm. L'aggiunta di nuovi componenti visuali e di nuovi eventi, rendono poi la Form creata propria del nostro programma.

Ogni Unit creata da Delphi risente delle modifiche apportate graficamente alla form. In particolare:
- l'aggiunta di un componente visuale alla form, inserisce la dichiarazione di un campo nella definizione del nuovo tipo (la classe TForm1)
- l'inserimento di un nuovo evento inserisce un metodo sempre a livello della classe TForm1 che conterrà il codice di gestione dell'evento stessoNel caso in cui il componente sia incluso in una libreria NON inserita di default all'atto della creazione della form, viene inserito dopo la parola chiave uses il nome della libreria che comprende il componente.

La variazione dei dati a livello di proprietà sulla form, può rispecchiarsi anche sulla definizione della classe TForm1. Per esempio se cambiamo il nome di un componente inserito nella form, il nome viene cambiato anche nella definizione della form stessa.
NOTA IMPORTANTE:La variazione manuale del nome di un campo precedentemente inserito nella form direttamente dal codice comporta la perdita dell'allineamento automatico tra codice e designer e ciò può creare problemi in fase di compilazione.

Per esempio:
- inserire un componente Button sulla form
- spostarsi sul codice e modificare il nome dal default Button1 a Test
eseguendo il programma sarà segnalato un primo errore di Test non trovato tra i componenti inseriti sulla form e qualora si provveda alla rimozione un successivo errore in fase di creazione della form di Class TButton non trovata.
Se invece la modifica viene fatta dall'Object inspector questa si rispecchia all'interno del codice in maniera automatica sia a livello di nome del campo che a livello di nome dei vari eventi creati.