2010-10-17 5 views
5

Spero che tu possa aiutarmi, vorrei leggere i dati dal file excel, e il modo in cui stavo facendo era creare istanza dell'applicazione Excel in backgroud, ma di I mi viene richiesto Macro VBA: disabilita o abilita.VBA ADODB excel - leggere i dati da Recordset

Ho 100 file di Excel da cui ho bisogno di raccogliere dati, quindi se mi venisse richiesto ogni singolo file, avrei finito con un approccio davvero non efficace. Anche se sono novizio nel mondo VBA di Excel e inizio a dubitare se c'è un altro modo .....

La mia domanda è posso aprirli in un altro modo?

Trovo che stod ADODB, penso che questo potrebbe aiutarmi. Quindi ho il codice come sotto. Come prima cosa mi piacerebbe leggere i dati da poche celle. Non ho idea di come posso leggere i dati. Provo a leggere come puoi vedere sotto, ma lancia bug. La connessione di Opennig va bene, anche l'esecuzione della query. Ma poi ho solo indovinare, come leggere i dati.

Io uso l'editor VBA.

Sub hello_jet() 
Set cn = CreateObject("ADODB.Connection") 
With cn 
.Provider = "Microsoft.Jet.OLEDB.4.0" 
    .ConnectionString = "Data Source=D:\test.xls" & _ 
"Extended Properties=Excel 8.0;" 
.Open 
End With 
strQuery = "SELECT * FROM [Sheet1$E36:E38]" 
Set rs = cn.Execute(strQuery) 
Do While Not rs.EOF 
    Set strNaam = rs.Fields(0).Value 
Loop 
rs.Close 
End Sub 

Sto lavorando in Office 2003. Ancora più scopro che versione di excell dovrebbe essere 11. Questo non funziona

risposta

13

Mi sorprende che la stringa di connessione funziona per voi, perché manca un punto e virgola. Set è usato solo con oggetti, quindi non diresti Set strNaam.

Set cn = CreateObject("ADODB.Connection") 
With cn 
.Provider = "Microsoft.Jet.OLEDB.4.0" 
    .ConnectionString = "Data Source=D:\test.xls " & _ 
    ";Extended Properties=""Excel 8.0;HDR=Yes;""" 
.Open 
End With 
strQuery = "SELECT * FROM [Sheet1$E36:E38]" 
Set rs = cn.Execute(strQuery) 
Do While Not rs.EOF 
    For i = 0 To rs.Fields.Count - 1 
    Debug.Print rs.Fields(i).Name, rs.Fields(i).Value 
    strNaam = rs.Fields(0).Value 
    Next 
    rs.MoveNext 
Loop 
rs.Close 

ci sono altri modi, a seconda di cosa si vuole fare, come ad esempio GetString (http://www.w3schools.com/ado/met_rs_getstring.asp).