Access – collegare dati da Excel

Collegare tabelle esterne ad Access usando codice VBA.

Ci sono casi in cui si ha bisogno di collegare dati esterni “al volo”, magari ogni volta che si avvia l’applicazione. In questo esempio userò DAO al posto di ADO in quanto molto più veloce per questo tipo di operazione. Il motivo per cui DAO  è più veloce di ADO in operazioni semplici come per esempio collegare dati esterni, risiede nel fatto che DAO non ha bisogno di tutte le aggiunte portate dalla dichiarazione, istanziazione e chiusura dei controllo ActiveX. Dato che DAO è un modello di oggetti più semplice di ADO, risulta più adatto a operazioni semplici ome l’apertura di una o più tabelle. ADO è sicuramente la scelta da fare quando si devono effettuare operazioni complesse sui dati.

Connect e SourceTableName

Per aprire la finestra immediata, premere i tasti CTRL-G, digitare il seguente codice: ? CurrentDB.TableDefs(“NomeTabella”).Connect

Si otterrà un valore nullo in risposta, ma, se la tabella è una tabella collegata, magari contenuta in un file di Excel, si otterrà il seguente valore: Excel 8.0;HDR)NO;IMEX=2;DATABASE=C:\File\FileExcel.xls dove “C:\File\FileExcel.xls” non è altro che il percorso completo del file con la tabella collegata.

NOTA: la proprietà Connect di una tabella interna al database è nulla perchè la tabella è presente nel database stesso. Non c’è nulla a cui connettersi, melgio, le tabelle presenti del DB sono sempre connesse. Invece le sorgenti dati esterne al DB origine avranno sempre una proprietà Connect che indica ad Access quali tipi di dati sono contenuti nell’origine dati collegata e dove trovare l’origine dei dati.

Se si accede ad un origine dati ISAM, supportata direttamente da Access, la stringa di connessione si ridurrà alla seguente forma: Oggetto.Connect=”Tipo;Database=Percorso” 

La funzione sotto riportata, mostra come connettersi ad un file Excel. Per collegarsi ad un foglio di calcolo, bisogna specificare di che tipo di foglio si tratti, dove si trova il foglio di calcolo e quale intervallo si vuole importare , per esempio, l’intervallo (B10:C35).

L’istruzione seguente richiama la funzione CollExcel per connettere un intervallo chiamato Names a una tabella di nome ExcelDemo. CollExcel(“File.xls”,”ExcelDemo”,”Names”)

Per utilizzare la funzione, la procedura richiede il nome del file di Excel, il nome della nuova tabella Access e un nome valido di iun intervallo di dati di Excel.

La funzione CollExcel restituisce un valore booleano che indica se la connessione al file Excel è riuscita.

Public Function CollExcel( ByVal sFileName As String, ByVal sTablename As String, _
    ByVal sRangeName As String ) As Boolean
 
  Const conCannotOpen = 3432
  Const conNotRange = 3011
  Const conTableExists = 3012

  Dim db As DAO.Database
  Dim td As DAO.Tabledef
 
  Dim sConnect As String
  Dim sMsg As String
  Dim sFunction As String
 
On Error GoTo HandleError
  
  CollExcel = False
  sFunction = “CollExcel”
 
  ‘ Controlla l’esistenza del file di Excel:
  sFileName = CurDir() & “\” & sFileName
  
  If Len(Dir(sFileName)) = 0 Then
    MsgBox “Il file ” & sFileName _
        & ” non è stato trovato!”
    MsgBox “Sposta il file in: ” _
        & CurDir() & ” per continuare.”
    Exit Function
  End If
  Set db = CurrentDb
 
  ‘ Crea una nuova tabledef nel database:
  Set td = db.CreateTableDef(sTablename)
 
  ‘ Stringa di connessione:
  sConnect = “Excel 8.0;HDR=YES;DATABASE=” & sFileName
  td.Connect = sConnect
 
  ‘ Specifica il nome del range dei dati in Excel:
  td.SourceTableName = sRangeName
  
  db.TableDefs.Append td
 
  ‘Restituisce True:
  CollExcel = True
 
ExitHere:
 
  Exit Function
 
HandleError:
 
  Select Case Err
    Case conCannotOpen
        sMsg = “Non posso aprire: ” & sFileName
 
    Case conTableExists
        sMsg = “La tabella ” & sTablename & _
             ” esiste già.”
 
    Case conNotRange
        sMsg = “Non posso trovare il range di dati: ” & sRangeName & ” .”
  
    Case Else
        sMsg = “Error#” & Err & “: ” & Error$
 
  End Select
 
  MsgBox sMsg, vbExclamation + vbOKOnly, _
       “Errore nella Procedura: ” & sFunction
 
  ‘Ritorna False:
  CollExcel = False
 
  Resume ExitHere
 
End Function

Informazioni su scaccaglia

Sviluppo software nei linguaggi: Visual Basic, Visual C e Java. Mi occupo anche di trasferimento dati in reti LAN o WAN. Creazione software a misura del cliente. Access - Microsoft SQL Server - Word - Excel.

Pubblicato il 7 giugno 2011 su Access e Visual Basic, Codice VBA. Aggiungi ai preferiti il collegamento . Lascia un commento.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: