Access & C.

Da Access ad Excel - I Primi Passi (breve tutorial).

Molte sono le persone che mi hanno chiesto un aiuto su come esportare dei dati da Access in Excel.

Forse è meglio scrivere, una volta per tutte, un breve tutorial in merito.

Da Access ad Excel - I Primi Passi (breve tutorial).

Prima di iniziare assicuriamoci di aver incluso, tra i riferimenti di access, le librerie ad oggetti di Excel:

- Entrare nell'ambiente di sviluppo Visual Basic di Access, selezionare il menu Strumenti e la voce di menù Riferimenti. Cercare, quindi, nell'elenco della maschera Riferimenti la voce "Microsoft Excel xx.yy Object Library", dove xx.yy indica la versione (per esempio in Office 2000 è 9.0), e contassegnarla.

Supponiamo di avere una semplice maschera con due campi textbox, un campo ComboBox, contenente le lettere delle colonne (A, B, C, D, E) ed un tasto. I due campi textbox ed il campo ComboBox sono, nell'ordine:

  1. il valore da assegnare ad una cella excel (nome del campo R_Valore);
  2. il numero della riga (nome del campo R_Riga);
  3. la lettera della colonna (nome del campo R_Colonna).

Il tasto, chiamato R_Excel, ci serve per lanciare la procedura che scriverà il valore immesso nella cella specificata.

La procedura è la seguente:

Private Sub R_Excel_Click()
   ' si dichiarano le variabili che conterranno gli oggetti Excel
   Dim MyEx_Appl As Excel.Application 'Oggetto Applicazione Excel
   Dim MyEx_WrkB As Excel.Workbook 'Oggetto Workbook
   Dim MyEx_Wsht As Excel.Worksheet 'Oggetto Worksheet
' dichiariamo le variabili che accolgono
   ' il valore, la riga e la colonna
   Dim Valore As String
   Dim Riga As String
   Dim Colonna As String
   Dim NumColonna As Integer
	'Preleviamo i valori dalla maschera
   ' Valore
   If Len(Me.R_Valore.Value) = 0 Then
   Valore = "Nessun Valore"
   Else   Valore = Me.R_Valore.Value
   End If
	' Riga
   If Len(Me.R_Riga.Value) = 0 Then
   Riga = "0"
   Else   Riga = Me.R_Riga.Value
   End If
	' Colonna
   If Len(Me.R_Colonna.Value) = 0 Then
   Colonna = "0"
   Else
   Colonna = Me.R_Colonna.Value
   End If
	' - Creiamo una nuova applicazione excel;
   Set MyEx_Appl = New Excel.Application
   ' - Aggiungiamo un nuovo workbook (generico)
   Set MyEx_WrkB = MyEx_Appl.Workbooks.Add
   ' - Prendiamo il primo foglio elettronico del workbook e lavoriamoci
   Set MyEx_Wsht = MyEx_WrkB.Worksheets(1)
   ' Picolo esperimento: Scriviamo l'etichetta "valore:" a sinistra del    valore
   NumColonna = Me.R_Colonna.ListIndex + 1 'prendo il numero d'ordine della colonna    "A, B, C, D, E, F"
   'Scrivo l'etichetta solo se c'è spazio:
   If NumColonna > 1 Then
   MyEx_Wsht.Cells(Riga, NumColonna - 1).Value = "valore:"
   End If
	' Scrivo il valore
   MyEx_Wsht.Cells(Riga, NumColonna).Value = Valore
   ' visualizziamo il foglio elettronico.
   MyEx_Appl.Visible = True
   End Sub
 

Esaminiamo nel dettaglio la parte della procedura che si occupa di scrivere in un foglio Excel. In pratica replichiamo con il codice VBA le operazioni che facciamo ordinariamente col mouse quando lanciamo Excel dal menù avvio di Windows o dalla barra delle applicazioni di Office: apriamo l'applicazione Excel, carichiamo un nuovo insieme di fogli elettronici vuoti, generalmente tre, selezioniamo una cella di uno dei fogli elettronici e scriviamo un valore. In pratica l'apertura dell'applicazione Excel ed il caricamento dei tre fogli elettronici vuoti sono operazioni che avvengono contestualmente e, quindi, non ce ne accorgiamo ma in VBA sono operazioni distinte!

La prima operazione è quella di apertura dell'applicazione Excel. Le righe di codice sono le seguenti:

 Dim MyEx_Appl As Excel.Application 'Oggetto Applicazione Excel
.....
....
' - Creiamo una nuova applicazione excel;
Set MyEx_Appl = New    Excel.Application

La seconda operazione è quella di aggiungere all'applicazione Excel un gruppo di fogli elettronici (per default tre) vuoti. Tale gruppo è rappresentato nel modello ad oggetti di Excel con l'oggetto workook. Per comprendere meglio questo concetto si consideri che ogni file .xls contiene un workbook Excel. Ogni applicazione Excel può supportare diversi workbook. Per verificarlo aprite Excel cliccando su un vostro file .xls e, successivamente, senza chiudere l'applicazione, aprite con il menu "File-Apri" un altro file .xls. A questo punto dovreste verificare Attraverso il menù "Finestra" la presenza dei due file. Avete, quindi, due workbook attivi sull'applicazione Excel.

Quanto sopra si traduce semplicemente nel fatto che ogni oggetto Excel.Application possiede una collezione di oggetti workbook chiamata "workbooks". Per Aggiungere un workbook vuoto all'applicazione basta invocare il comando Add (cioè aggiungi): Excel.Application.Workbooks.Add(). Se il workbook è conforme ad un modello Excel (i famosi file .xlt) o è un file Excel già salvato, basta indicare il percorso del file come argomento del metodo Add(): Excel.Application.Workbooks.Add(PercorsoFile).

 Dim MyEx_WrkB As Excel.Workbook 'Oggetto    Workbook 
.....
' - Aggiungiamo un nuovo workbook (generico) 
Set MyEx_WrkB = MyEx_Appl.Workbooks.Add 

A questo punto basta indicare ad Excel quale foglio elettronico usare, ad esempio il primo. Ogni foglio elettronico di un workbook viene rappresentato con un oggetto worksheet (letteralmente foglio di lavoro). Dunque, sappiamo che ogni workbook è composto da fogli elettronici (tre di default) e questo si traduce nel fatto che un oggetto workbook ha una collezione di oggetto worksheet chiamata worksheets. Le sottostanti righe illustrano come indicare il primo foglio elettronico.

Dim MyEx_Wsht As Excel.Worksheet 'Oggetto    Worksheet
....
' - Prendiamo il primo foglio elettronico del workbook    e lavoriamoci
 Set MyEx_Wsht = MyEx_WrkB.Worksheets(1)

Bene. A questo punto la variabile MyEx_Wsht contiene un foglio elettronico. Vogliamo scrivere un Valore in una cella le cui coordinate sono nelle variabili riga e NumColonna? Semplice, basta "dirlo" con la seguente istruzione VBA:

 ' Scrivo il valore 
MyEx_Wsht.Cells(Riga, NumColonna).Value = Valore 

A questo punto dovrebbe essere chiaro il ruolo della collezione Cells e cosa significa la precedente riga di codice.

Fino a questo momento abbiamo lavorato "dietro le quinte". Adesso è venuto il momento di mostrare a video il risultato.

' visualizziamo il foglio elettronico. 
MyEx_Appl.Visible    = True

Facile, vero?

Bene, divertitevi con questo esempio: EsempioExcel_I.zip (33Kb)

Se vi siete divertiti e volete acquisire maggiore praticità, vi consiglio di scaricare anche questo secondo esempio in cui dei dati vengono scritti in un foglio elettronico Excel pre-esistente in posizioni predefinite. In pratica la procedura scrive la somma di un contocorrente nella cella adiacente a quella dove trova l'identificativo del contocorrente. La procedura, quindi, per ogni contocorrente, cerca l'identificativo nel foglio Excel e, una volta trovato, scrive il relativo importo nella cella a destra: EsempioExcel_II.zip (28Kb).

Per approfondire e proseguire:

 

03/10/2007

Michele de Nittis

Inserisci un commento   |   Indietro

  [da 1 a 0 di 0 commenti]     |   Indietro

Inserisci un commento

Nick: e-mail:

web:

Commento: