Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Recordset in Excel

Forumthread: Recordset in Excel

Recordset in Excel
26.06.2015 15:56:22
Ohlrich
Hallo Community,
ich habe folgendes Problem.
Ich bekomme einen Automatisierungsfehler 80040e14 bei folgender Zeile und verstehe nicht weshalb.

Dim cn As ADODB.Connection
Dim rst As New ADODB.Recordset
Dim cmd As New ADODB.Command
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=E:\Dokumente\Excel\Artikelliste\Artikelliste_2015.xls;" &  _
_
"Extended Properties=Excel 8.0;"
.Open
End With
Set rst = New ADODB.Recordset
Dim strSQL As String
strSQL = "SELECT * FROM [Artikelliste$]"
'rst.Open "Artikelliste", cn, adOpenDynamic
With rst
.Source = strSQL
.ActiveConnection = cn
.Open 'hier tritt der Fehler auf
End With
Mein Ziel ist es eine Verbindung zu einer anderen Excel-Datei aufzubauen. Danach ein Recordset aufgrund von durch SQL gefilterten Daten aus dem externen Tabellenblatt zu erstellen und danach stelle ich ein paar schöne Dinge mit dem Recordset an.
Meine Google-Suche hat bisher ergeben, dass der Fehler wohl aufgrund des SQL-String käme. Habe diverse Möglichkeiten ausprobiert, inklusive anderem Vorgehen bei dem erstellen des Recordsets. Bisher alles ohne Erfolg.
Bin für jeden Hinweis dankbar.

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Recordset in Excel
26.06.2015 18:38:13
Luschi
Hallo Ohlrich,
ich mach das immer so:

Sub testADODB()
Dim cn As Object
Dim rst As Object
Dim strSQL As String
Dim xDatei As String
'es ist kein Verweis gesetzt zu ADODB (Early Binding)
'Late Binding
'dadurch ist gewährleistet, daß immer der gerade neueste installierte
'ADO-Treiber angewendet wird
Set cn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
xDatei = "G:\Daten\Excel\E_2010\PowerPivot\Beispiel_01\05_05_Artikel.xls"
'xDatei = "G:\Daten\Excel\E_2010\PowerPivot\Beispiel_01\05_05_Artikel.xls"
'xDatei = "G:\Daten\Excel\E_2010\PowerPivot\Beispiel_01\05_05_Artikel.xlsx"
xDatei = "G:\Daten\Excel\E_2010\PowerPivot\Beispiel_01\05_05_Artikel.xlsm"
With cn
'für xls-Dateien E_97 bis E_2003
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & xDatei & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"""
'HDR=NO - wenn keine Überschriften im Bereich
'    'für xlsx-Dateien ab E_2007
'    .Provider = "Microsoft.ACE.OLEDB.12.0"
'    .ConnectionString = "Data Source=G:\Daten\Excel\E_2010\PowerPivot\Beispiel_01\ _
05_05_Artikel.xlsx;" & _
'                        "Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"""
'    'für xlsm-Dateien ab E_2007
'    .Provider = "Microsoft.ACE.OLEDB.12.0"
'    .ConnectionString = "Data Source=G:\Daten\Excel\E_2010\PowerPivot\Beispiel_01\ _
05_05_Artikel.xlsx;" & _
'                        "Extended Properties=""Excel 12.0 Macro;HDR=YES;IMEX=1"""
.Open
End With
'- Artikel ist der Tabellenname in der Exceldatei
strSQL = "SELECT * FROM [Artikel$];"
With rst
.Source = strSQL
.ActiveConnection = cn
.Open 'hier tritt der Fehler auf
End With
Tabelle1.Cells.Clear
'Datenübernahme
Tabelle1.Range("A1").CopyFromRecordset rst
rst.Close
cn.Close
Set rst = Nothing
Set cn = Nothing
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Recordset in Excel
29.06.2015 09:26:10
Ohlrich
Ha, großartig =)
Habe mich selbst ausgetrickst, indem ich die Endung der Exceldatei nicht komplett kopiert hatte und so aus xlsm nur xls wurde.
Danke für die Hilfe.
;
Anzeige

Infobox / Tutorial

Recordset in Excel: Fehlerbehebung und Beispiele


Schritt-für-Schritt-Anleitung

  1. Verbindung zur Excel-Datei herstellen: Verwende den folgenden VBA-Code, um eine Verbindung zu einer Excel-Datei mit dem ADODB.Recordset herzustellen.

    Dim cn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim strSQL As String
    
    Set cn = New ADODB.Connection
    With cn
       .Provider = "Microsoft.Jet.OLEDB.4.0"
       .ConnectionString = "Data Source=Dein_Pfad\Deine_Datei.xls;Extended Properties='Excel 8.0;HDR=YES;IMEX=1';"
       .Open
    End With
    
    Set rst = New ADODB.Recordset
    strSQL = "SELECT * FROM [Dein_Tabellenname$];"
    rst.Open strSQL, cn, adOpenDynamic
  2. Daten aus dem Recordset in ein Arbeitsblatt kopieren: Um die Daten aus dem Recordset in ein Excel-Arbeitsblatt zu übertragen, kannst du folgenden Code verwenden:

    Tabelle1.Cells.Clear
    Tabelle1.Range("A1").CopyFromRecordset rst
    rst.Close
    cn.Close

Häufige Fehler und Lösungen

  • Fehler 80040e14: Dieser Automatisierungsfehler tritt oft auf, wenn der SQL-String nicht korrekt ist. Achte darauf, dass der Tabellenname und die Excel-Datei korrekt angegeben sind. Überprüfe auch die Dateiendung; eine Verwechslung zwischen .xls und .xlsm kann zu Problemen führen.

  • Falscher Provider: Stelle sicher, dass der richtige Provider für Deine Excel-Version verwendet wird. Für .xls-Dateien nutze Microsoft.Jet.OLEDB.4.0, während für .xlsx oder .xlsm-Dateien Microsoft.ACE.OLEDB.12.0 erforderlich ist.


Alternative Methoden

Eine Alternative zum ADODB.Recordset ist die Verwendung von Excel VBA ADO. Hierbei kannst du die ADODB.Stream-Klasse nutzen, um Daten aus einer Excel-Datei zu lesen. Hier ist ein Beispiel:

Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
stream.Type = 1 ' binär
stream.Open
stream.LoadFromFile "Dein_Pfad\Deine_Datei.xls"
' Hier kannst du den Stream weiterverarbeiten
stream.Close

Praktische Beispiele

Beispiel 1 - Daten filtern: Du kannst den SQL-String anpassen, um spezifische Daten zu filtern:

strSQL = "SELECT * FROM [Dein_Tabellenname$] WHERE Bedingung='Wert';"

Beispiel 2 - Daten in eine andere Tabelle kopieren: Wenn Du die Daten in eine andere Tabelle kopieren möchtest, ändere einfach den Zielbereich:

Tabelle2.Range("A1").CopyFromRecordset rst

Tipps für Profis

  • Nutze Late Binding, um sicherzustellen, dass die neueste Version der ADODB-Bibliothek verwendet wird. Dies verhindert Komplikationen bei der Kompatibilität zwischen verschiedenen Excel-Versionen.

  • Achte darauf, dass Du immer die Verbindung und das Recordset schließt, um Speicherlecks zu vermeiden.

  • Verwende Debugging, um den SQL-String zu überprüfen, bevor Du ihn ausführst. Setze einen Haltepunkt und inspiziere den String im Direktfenster.


FAQ: Häufige Fragen

1. Was ist ein Recordset in Excel? Ein Recordset ist ein Objekt, das eine Sammlung von Datensätzen aus einer Datenquelle darstellt. In Excel wird es häufig verwendet, um Daten aus externen Excel-Dateien oder Datenbanken zu lesen.

2. Wie kann ich einen Automatisierungsfehler 80040e14 beheben? Überprüfe, ob Dein SQL-String korrekt ist, und stelle sicher, dass die Dateiendung und der Provider zu Deiner Excel-Datei passen. Achte darauf, dass die Tabelle existiert und korrekt benannt ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige