Datenabfrage aus Excel Codebeispiele Seite 1
Transcription
Datenabfrage aus Excel Codebeispiele Seite 1
Datenabfrage aus Excel Mittwoch, 26. Januar 2005 09:24 Zugriff über die Excel-Schnittstelle: Set xl = New Excel.Application ' Aktives Arbeitsblatt auswählen Set wb = xl.Workbooks.Open(sDateiname) Set ws = wb.ActiveSheet ' Feld A1 auswählen ws.Range("A1").Select ' im Arbeitsblatt die erste Zelle der Zeile j auswählen ws.Cells(j, 1).Select MerkFeld = xl.ActiveCell.Next.Cells.Activate ' Vorname mVorname = xl.ActiveCell.Text Wir empfehlen allerdings, wenn man mehrere Daten aus Excel abfragen möchte (Datenimport über Hunderte von Zeilen) den Zugriffüber die ADO-Schnittstelle. Damit lässt sich ein Geschwindigkeitszuwachs von mehreren Hundert Prozent erreichen. Dim Conn As ADODB.Connection Dim Rs As ADODB.Recordset Dim Fld As ADODB.Field ' Namen des ersten Blattes der Excel-Tabelle auslesen Dim xl As Excel.Application Dim ws As Excel.Worksheet With New CApplications Set xl = .ExcelApp End With Set ws = xl.Workbooks.Open(sDateiname).ActiveSheet sTabelle = ws.Name xl.Quit Set ws = Nothing Set xl = Nothing ' Datenbank öffnen (Excel-Datei) Set Conn = New ADODB.Connection Conn.CursorLocation = adUseClient ' ' ' ' Excel-Versionen Excel 97: "Excel 8.0;" Excel 2000: "Excel 9.0;" Excel XP: "Excel 10.0;" ' IMEX=1; : Alle Daten werden ins Textformat konvertiert. Dadurch wird vermieden, dass ' NULL-Werte anstatt von echten Werten importiert werden Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Extended Properties=""Excel 8.0; HDR=YES; IMEX=1;"";" & _ "Data Source=" & sDateiname & ";" ' Recordset erstellen und öffnen Set Rs = New ADODB.Recordset Rs.Open "SELECT * FROM [" & sTabelle & "$]", Conn, adOpenKeyset, adLockOptimistic Rs.MoveFirst ' Der Import setzt an der 2.(!) Datenzeile an. Die erste Zeile wird als Beispielzeile ' verwendet, damit die ADO-Schnittstelle den Feldtyp erkennen kann. Ist nämlich der ' Inhalt einer Spalte in den ersten 8 Zeilen leer, nimmt ADO als Feldtyp "Zeichenkette" ' an. Später auftretende Feldinhalte, die als Datum oder Zahlen formatiert sind, werden ' nicht mehr erkannt - ADO liefert als Feldwert NULL zurück. ' Vgl. ' [1] Microsoft Knowledge Base Article - 257819 ' HOWTO: Use ADO with Excel Data from Visual Basic or VBA ' http://support.microsoft.com/default.aspx?scid=kb;EN-US;257819 ' [2] Microsoft Knowledge Base Article - 278973 ' SAMPLE: ExcelADO Demonstrates How to Use ADO to Read and Write Data in Excel Workbooks ' http://support.microsoft.com/default.aspx?scid=kb;EN-US;278973 Rs.MoveNext ' Leere Zeilen am Anfang überspringen Do Until Rs.EOF Or ReadFieldValue(Rs.Fields(0).Value) <> "" Rs.MoveNext Loop Do While Not Rs.EOF ' Felder durchgehen For i = 1 To Rs.Fields.Count MerkeFeld = Rs.Fields(i - 1).Value Next i ' Nächste Zeile Rs.MoveNext Loop Private Function ReadFieldValue(val As Variant) As String On Error Resume Next If IsNull(val) Then ReadFieldValue = "" Else ReadFieldValue = val Codebeispiele Seite 1 ReadFieldValue = val End If End Function Suchbegriffe: Excel Stand: 2004-09-15 Codebeispiele Seite 2