Newsgroup: it.comp.appl.access
Titolo: Importare dati da Excel verso Access con Vba

Ciao a Tutti,
io uso la sottoscritta sub per collegarmi da access verso excel, prelevare dei dati e continuare a lavorare in access.
La sub funziona ,solamente che io vorrei crearla usando ADO. Ho provato un po di tutto ma alla fine non ci riesco.
Secondo Voi, dove sbaglio?
Grazie e a presto !
Ciao Ciao 
 
'Modifiche con ADO
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
 
Set conn = CurrentProject.Connection
Set rst = New ADODB.Recordset
 
rst.Open "Tabella1", conn
 
Do Until rst.EOF
rst.AddNew
  rst![COGNOME] = ExcelApp.Worksheets(1).Range("a" & i).Value
  rst.Fields("NOME")= ExcelApp.Worksheets(1).Range("B" & i).Value
  rst.Update
rst.MoveNext
 
Loop
 
rst.Close
 
 
 
 
'sub funzionante con DAO
Private Sub apri_dao()
 
Dim ExcelApp As Object
Set ExcelApp = CreateObject("Excel.Application")
 
ExcelApp.Workbooks.Open ("C:\Users\ARCHIMEDE\Desktop\prova_veicoli.xls")
 
ExcelApp.Worksheets(1).Activate
ExcelApp.Visible = True
 
Set db = currentDB
Set table = db.OpenRecordset("Tabella1")
 
If table.BOF Then 
 
For i = 1 To 20
  table.AddNew
  table.[COGNOME] = ExcelApp.Worksheets(1).Range("a" & i).Value
  table.[NOME] = ExcelApp.Worksheets(1).Range("b" & i).Value
  table.Update
Next
 
End If
 
ExcelApp.Workbooks.Close
ExcelApp.Visible = False
 
Set ExcelApp = Nothing
 
End Sub

 Ciao Ciao 
[...]
 
Che versione di Office stai usando? 32 o 64 bit?
 
Bruno
 
 

Ciao Bruno,
io uso office 14 ,windows7 ,32 bit
 
 
 
 

 io uso office 14 ,windows7 ,32 bit
 
Prova questa:
===========================================
Private Sub Command26_Click()
'
' Access 2010    12-10-2012
' D:\Access\Mdb\BC.accdb    Form1, Button: Import da Excel - ADO
'
' Da Access importa range di Excel via ADO
'
' Reference:
' Microsoft ActiveX Data Objects 6.1 Library
'
' Occorre inoltre installare:
' Microsoft Access Database Engine (2007 | 2010)
' File AccessDatabaseEngine.exe reperibile da Microsoft Download Center
' 
http://www.microsoft.com/en-us/download/details.aspx?id=13255
 
'
' ExcelRange deve comprendere anche le intestazioni dei campi.
'
Dim ExternalDB As ADODB.Connection, ExternalRS As ADODB.Recordset
Dim LocalDB As DAO.Database, LocalRS As DAO.Recordset
Dim ExcelFile As String, ExcelRange As String, AccessTable As String
Dim AccessTableName As String
 
' Definizioni -------------------------------------------
AccessTableName = "T7"
ExcelFile = "D:\Document\Excel\XLS\Book2.xlsm"
ExcelRange = "Tabella1"
' -------------------------------------------------------
 
Set LocalDB = CurrentDb
Set LocalRS = LocalDB.OpenRecordset(AccessTableName, dbOpenDynaset)
Set ExternalDB = New ADODB.Connection
Set ExternalRS = New ADODB.Recordset
 
With ExternalDB
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "Data Source=" & ExcelFile & ";" & _
                        "Extended Properties=Excel 12.0 Macro;"
    .Open
End With
 
ExternalRS.Open "SELECT " & ExcelRange & ".* FROM " & ExcelRange, 
ExternalDB
Do Until ExternalRS.EOF
    With LocalRS
        .AddNew
        ![Nome] = ExternalRS![Nome]
        ![Cognome] = ExternalRS![Cognome]
        .Update
    End With
    ExternalRS.MoveNext
Loop
 
End Sub
=============================================
 
Un'altra domanda: perchï¿œ ADO? ormai ï¿œ un ferrovecchio!
Devi collegarti a qualche esotico database?
 
Bruno
 
 

Ciao Bruno,
innanzi tutto ti Voglio Ringraziare per la tua collaborazione e per tutto il codice che mi hai postato.
Prima però di testarlo vorrei chiederti un chiarimento, perchè tu mi dici 
che ADO è un ferrovecchio.
Non essendo molto pratico di access ho puntato su ADO perchè un libro su cui studio del 2007 dice che ADO è il futuro e DAO è il ferro vecchio.
Adesso mi metti in crisi! 
Sei sicuro? Sono andato appena adesso a rileggerlo ......
 

Ciao Bruno, ho un piccolo problemino perchè sicuramente non imposto in modo corretto il foglio e il range da cui prelevare i dati.
Io ho scritto:
 
AccessTableName = "Tabella1"
ExcelFile = "C:\Users\ARCHIMEDE\Desktop\prova_veicoli.xls"
ExcelRange = Sheets("nomi_lista").Range("a1:b20")
 
ma poi su Excelrange mi da errore !
 

 ma poi su Excelrange mi da errore !
 
Sul foglio di Excel devi definire con un nome il range A1:B20.
Supponendo tale nome sia Archimede, avremo nel codice:
ExcelRange = "Archimede".
Non ï¿œ necessario riportare il nome del foglio poichï¿œ i nomi di range in 
Excel sono unici per Workbook.
 
ADO, pur essendo successivo a DAO, ï¿œ da considerarsi obsoleto, per lo 
meno in ambito Microsoft.
Viene utlizzato per collegamenti ODBC a database che prima ho definito 
"esotici".
 
Ma tu pensa che quelle quattro righe di codice che ti ho inviato le 
avevo scritte anni or sono, perï¿œ con le nuove versioni di Office non 
funzionavano piï¿œ.
Ho perso una mezza giornata per arrivare a quel link che ti ho inviato, 
dal quale ho rilevato il file e la nuova sintassi di definizione della 
connessione.
Con DAO questo non ï¿œ mai successo dalla prima versione di Access a 
quella odierna.
Nella quale odierna versione DAO ï¿œ sparito ed ï¿œ stato inglobato, quanto 
a funzionalitï¿œ, nella Refernce: Microsoft Office 14.0 database engine 
Object Library.
 
Bruno
 
 

Ciao Bruno,
grazie per questo tuo consiglio, a questo punto preferisco pure io stare sui DAO, del resto se funzionano bene perchè cambiarli. Anche perchè per il mio uso rimango sempre in ambito office usando excel od access, mai mi collegherò a database aldifuori di questi due applicativi.
 
Ho fatto le prove con il codice che mi hai postato e anche se ho definito il range non funziona, però a questo punto pensavo di lasciare l'errore in sospeso perchè con DAO allo stato attuale ci riesco ad importare i dati per cui avrei già la soluzione sottomano.
 
Ti voglio ringraziare per i tuoi suggerimenti perchè mi son stati molto utili.
Grazie Tantissimo e alla prossima!
Ciao Ciao

 range non funziona
 
Dimmi dove si ferma, su quale riga dï¿œ errore.
ï¿œ una curiositï¿œ da programmatore che non puï¿œ essere disattesa.
 
Bruno
 
 

Ciao Bruno,
so che lasciare questi dubbi non è una cosa bella , per cui ti dico che si blocca su Open e mi da errore  runtime 
2147467259
 (80004005) "la tabella esterna non e nel formato corretto".
Ciao a dopo

 esterna non e nel formato corretto". Ciao a dopo
 
Hai messo le label dei campi? comprendendole nel range?
Anch'io ho Office 2010 e qui funziona tutto perfettamente.
 
Bruno
 
 

I apologize to Bruno for setting a range without label range!
Now it works! Sorry I have made you to lose your precious time :-(
 
Bravo Bruno ! Sei veramente in gamba! Finalmente ci siamo tolti questo sassolino, cosi almeno adesso conosco entrambe i modi!
Grazie tantissimo per la collaborazione e ai prossimi sassolini !!!!
 
Ciao Ciao e molte Grazie.
 

 Sei sicuro? Sono andato appena adesso a rileggerlo ......
 
Con google ecc. trovi tante discussioni, p.e. questa:
 
https://groups.google.com/forum/?fromgroups#!msg/it.comp.appl.access/Yy3-NgCfG1c/J17h-AbJ9oMJ
 
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 

Ciao Karl,
grazie per questo tuo intervento. Su questa problematica Ado vs Dao io non ho sufficiente esperienza per dire cosa possa essere meglio, a volte si pensa che le cose ultime siano migliori, a volte poi dipende dall'uso che ne fa una persona, sempre da alcuni libri sembra che Dao sia piu veloce, che Ado sia piu adatto se usi database in rete. Sinceramente io ho solo confusione, sulla rete trovo molto in Dao e poco in Ado, cosa scegliere non lo so.
 
Io avrei bisogno di lavorare su file di access che al massimo risiedono in un server all'interno di una ditta, tutti database in access o al limite file di excel da cui prelevare dati, comunque sempre lavorando con Office.
 
Potresti consigliarmi qualcosa? 
 
Ciao 
 
PS. Utile il tuo website!
 


Non mi inoltro in discussioni che sono già state fatte. Rifletto solo sul fatto che Access lavora in DAO sempre...se scrivi in ADO, lui converte in DAO ed esegue. Quindi, se parliamo di mdb (o formati successivi) per me c'è solo DAO. ADO lo si usa in altre parentesi (e non si sa manco per quanto ancora). Se ti connetti ad altro, la situazione è da valutare.

Grazie per questo tuo parere , più si conosce più le cose son chiare!
 
Ciao