Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Objekte / Office / Excel

Zugriff auf Excel-Tabellen ohne Excel

Einleitung

Der Zugriff auf die in Excel-Dateien (*.xls) gespeicherten Daten erfordert normalerweise eine vollständige Excel-Installation, so dass die sogenannte ActiveX-Automation genutzt werden kann.

Mit Hilfe von ADO und der JetEngine kann auf die Tabellen einer Excel-Datei aber auch wie auf eine normale Datenbank zugegriffen werden, ohne den oben erwähnten Overhead.

Beispiele

Die folgende Routine gibt die komplette Tabelle "2001" aus der Excel-Datei "test.xls" im Testfenster aus:

Public Sub Test()
  Dim Col As ADODB.Field
  
  With ExcelTable("D:\xyz\test.xls", "2001")
  
    'Kopfzeile ausgeben:
    For Each Col In .Fields
      Debug.Print Col.Name,
    Next Col
    Debug.Print
    
    'Daten ausgeben:
    Do Until .EOF
      For Each Col In .Fields
        Debug.Print Col.Value,
      Next Col
      Debug.Print
      .MoveNext
    Loop
    
    .Close
  End With
End Sub

Sogar Änderungen der vorhandenen Excel-Tabelle können gemacht werden:

With ExcelTable(D:\xyz\test.xls", "2001")

  'Neue Zeile hinzufügen:
  .AddNew Array("Monat", "Wert"), Array("Dez.", 25.5)

  'Vorhandenen Wert ändern:
  .Update "Wert", 27.7

  .Close
End With

Code / Quelltext

Binden Sie die "Microsoft ActiveX Data Object Library" via Projekt/Verweise (Project/References) in Ihr Projekt ein. Fügen Sie folgenden Code hinzu:

Public Function ExcelTable( _
    ByRef Path As String, _
    ByRef Table As String _
  ) As ADODB.Recordset
  'Deklarationen:
  Dim SQL As String
  Dim Con As String
  
  'Los gehts:
  SQL = "select * from [" & Table & "$]"
  Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Extended Properties=Excel 8.0;" _
      & "Data Source=" & Path & ";"
  Set ExcelTable = New ADODB.Recordset
  ExcelTable.Open SQL, Con, adOpenKeyset, adLockOptimistic
End Function

© Jost Schwider, 29.12.2001-29.12.2001 - http://vb-tec.de/exceltab.htm