Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Importare dati da Excel verso Access con Vba

2,682 views
Skip to first unread message

ARCHIMEDE

unread,
Oct 12, 2012, 4:32:03 AM10/12/12
to
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

Bruno Campanini

unread,
Oct 12, 2012, 10:49:02 AM10/12/12
to
ARCHIMEDE brought next idea :
> 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
[...]

Che versione di Office stai usando? 32 o 64 bit?

Bruno


archim...@hotmail.it

unread,
Oct 12, 2012, 2:37:28 PM10/12/12
to
Ciao Bruno,
io uso office 14 ,windows7 ,32 bit




Bruno Campanini

unread,
Oct 12, 2012, 8:19:13 AM10/12/12
to
archim...@hotmail.it wrote :
> Ciao Bruno,
> 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


archim...@hotmail.it

unread,
Oct 12, 2012, 6:48:47 PM10/12/12
to
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 ......

archim...@hotmail.it

unread,
Oct 12, 2012, 7:34:06 PM10/12/12
to
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 !

Bruno Campanini

unread,
Oct 12, 2012, 7:32:39 PM10/12/12
to
archim...@hotmail.it formulated on Saturday :
> 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 !

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


archim...@hotmail.it

unread,
Oct 13, 2012, 3:16:54 PM10/13/12
to
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

Bruno Campanini

unread,
Oct 14, 2012, 10:45:02 AM10/14/12
to
on 13-10-12, archim...@hotmail.it supposed :
> 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

Dimmi dove si ferma, su quale riga dᅵ errore.
ᅵ una curiositᅵ da programmatore che non puᅵ essere disattesa.

Bruno


Archimede

unread,
Oct 14, 2012, 11:10:10 AM10/14/12
to
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

Bruno Campanini

unread,
Oct 15, 2012, 5:02:31 AM10/15/12
to
After serious thinking Archimede wrote :
> 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

Hai messo le label dei campi? comprendendole nel range?
Anch'io ho Office 2010 e qui funziona tutto perfettamente.

Bruno


Archimede

unread,
Oct 15, 2012, 9:18:39 AM10/15/12
to
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.

Karl Donaubauer

unread,
Oct 17, 2012, 5:24:04 AM10/17/12
to
archim...@hotmail.it wrote:
> ...
> 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 ......

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

Archimede

unread,
Oct 17, 2012, 2:38:37 PM10/17/12
to
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!

Fair87

unread,
Oct 18, 2012, 8:01:19 AM10/18/12
to
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.

Archimede

unread,
Oct 18, 2012, 9:59:45 AM10/18/12
to
Grazie per questo tuo parere , più si conosce più le cose son chiare!

Ciao

0 new messages