2010-10-17 9 views
5

J'espère que vous pouvez m'aider, je voudrais lire les données de fichier Excel, et la façon dont je faisais était la création d'instance de l'application Excel dans backgroud, mais que je suis invité à propos Macros VBA - le désactiver ou l'activer.VBA ADODB excel - lire les données de Recordset

J'ai 100 fichiers Excel dont j'ai besoin de collecter des données, donc si on me demandait chaque fichier, je finirais avec une approche vraiment pas efficace. Bien que je suis débutant dans le monde Excel VBA et commence à douter s'il y a un autre moyen .....

Ma question est de puis-je les ouvrir d'une autre manière?

Je trouve sth ADODB, je pense que cela pourrait m'aider. J'ai donc du code comme ci-dessous. Comme la première chose que je voudrais lire des données de quelques cellules. Je ne sais pas comment puis-je lire les données. J'essaie de lire comme vous pouvez le voir ci-dessous mais ça jette un bug. La connexion Opennig se passe bien, l'exécution de la requête aussi. Mais alors je devine juste, comment lire les données.

J'utilise l'éditeur 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 

Je travaille dans Office 2003. Pourtant, plus je trouve que la version de Excell devrait être 11. Cela ne fonctionne pas

Répondre

13

Je suis surpris que la chaîne de connexion fonctionne pour vous, car il Il manque un point-virgule. L'ensemble est uniquement utilisé avec des objets, donc vous ne diriez pas 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 

Il existe d'autres façons, en fonction de ce que vous voulez faire, comme GetString (http://www.w3schools.com/ado/met_rs_getstring.asp).