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

Similar documents