2010-10-17 17 views
5

Ich hoffe, Sie können mir helfen, ich möchte Daten aus Excel-Datei lesen, und die Art und Weise Ich wollte Instanz der Excel-Anwendung im Hintergrund erstellen, aber als ich bin aufgefordert, über VBA-Makros - deaktivieren oder aktivieren Sie es.VBA ADODB Excel - Daten aus Recordset lesen

Ich habe 100 von Excel-Dateien, die ich Daten sammeln muss, also wenn ich jede einzelne Datei aufgefordert werden würde, würde ich am Ende wirklich nicht effektiv Ansatz. Obwohl ich Neuling in Excel VBA Welt bin und anfange zu bezweifeln, wenn es einen anderen Weg gibt ...

Meine Frage ist, kann ich sie auf andere Weise öffnen?

Ich finde st ADODB, ich denke, das könnte mir helfen. Also habe ich Code wie unten. Als erstes würde ich gerne Daten aus wenigen Zellen lesen. Ich habe keine Ahnung, wie ich die Daten lesen kann. Ich versuche zu lesen, wie Sie unten sehen können, aber es wirft Bug. Opennig-Verbindung geht gut, Abfrageausführung auch. Aber dann rate ich nur, wie man die Daten liest.

Ich benutze VBA-Editor.

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 

Ich arbeite in Office 2003. Noch mehr finde ich heraus, dass Version von Excell 11 sollte diese nicht

Antwort

13

funktioniert Ich bin überrascht, dass die Verbindungszeichenfolge für Sie arbeitet, weil es fehlt ein Semikolon. Set wird nur mit Objekten verwendet, also würden Sie SetNaam nicht sagen.

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 

Es gibt andere Möglichkeiten, je nachdem, was Sie tun möchten, wie GetString (http://www.w3schools.com/ado/met_rs_getstring.asp).

Verwandte Themen