Run-Time-Fehlermeldung: die Externe Tabelle ist nicht im erwarteten format

War ich versucht, ziehen Daten aus einer Freigegebenen Laufwerk ohne die Datei zu öffnen.
Dazu verwendete ich ADO so, dass ich manipulieren kann die daraus resultierende Tabelle ganz einfach, da brauche ich nur bestimmte Felder.
Anstatt die filter und kopieren routine, ADO vorzuziehen ist, da kann ich verwenden sql-Abfrage zu bekommen, was ich will.
Leider hab ich Probleme Sie in den unten line:

rec.Open sqlStr, con, adOpenStatic, adLockReadOnly

die wirft folgende Fehlermeldung

Run-Time-Fehlermeldung: die Externe Tabelle ist nicht im erwarteten format

Die Datei ist in .xls format und es ist in der Trust Center Standard-Einstellung von "blocked files" (Dateien in der Geschützten Ansicht geöffnet).
So aus Neugier habe ich vorübergehend deaktiviert, die Datei blockieren, aber der gleiche Fehler aufgetreten ist.
Was seltsam ist, wenn ich die Datei öffnen und den code auszuführen, ruft es die Daten, die ich will.
Irgendwelche Gedanken auf, wie ich kann diese Arbeit ohne die Datei zu öffnen?

Code, den ich derzeit nutze:

Sub stancial()
    Dim sPath As String, fName As String

    sPath = "P:\Folder\": fName = "Report.xls"

    Dim con As ADODB.Connection: Set con = New ADODB.Connection
    Dim rec As ADODB.Recordset: Set rec = New ADODB.Recordset

    Dim DataSource As String
    DataSource = sPath & fName

    con.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & DataSource & ";" & _
            "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"

    Dim cat As ADOX.Catalog: Set cat = New ADOX.Catalog
    Set cat.ActiveConnection = con

    Dim shName As String
    shName = Replace(cat.Tables(0).Name, "'", "")

    Dim sqlStr As String
    sqlStr = "SELECT * FROM [" & shName & "];"

    rec.Open sqlStr, con, adOpenStatic, adLockReadOnly
    Sheet1.Range("A2").CopyFromRecordset rec

    rec.Close
    con.Close
    Set cat = Nothing
    Set rec = Nothing
    Set con = Nothing
End Sub

Edit1:

Btw, als was ich habe kommentiert, ich habe es auch so probiert:

    con.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & DataSource & ";" & _
            "Extended Properties=""Excel 8.0;HDR=YES"";"

und auch dies:

    con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & DataSource & ";" & _
            "Extended Properties=""Excel 8.0;HDR=YES"";"

Aber es gibt noch den Fehler. Ich denke, dass hat etwas zu tun mit dem öffnen der Recordset eher als die Verbindung.

"Extended Properties=""Excel 12.0 Xml;HDR=YES""in Ihrer Verbindungszeichenfolge bezieht sich auf Excel 2007 (und höher) im xlsx-Format XML-format. Versuchen "Extended Properties=""Excel 8.0;HDR=YES"" für xls-Dateien.
Oh, vergaß zu erwähnen, ich habe versucht. Gleichen Fehler. Auch, ich denke es ist kein problem in der Einstellung der Verbindung, aber die Eröffnung der Recordset.
Hm, aber der Fehler sagt nur dies: nicht das erwartete format. In welchem format ist die Datei wirklich? Wirklich Excel 97-2003 xls? Wie es erstellt wurde?
Yep, das ist das format. Ich ist eine Maschine generierte Datei, die die Ergebnisse der Inspektion. Ich arbeitete an einer Vorlage zusammenfassen-Maschine-Ausgabe. Also ich brauche um bestimmte Daten zu erhalten, die Felder von der Maschine generierten Datei gespeichert in einem freigegebenen Laufwerk befinden. Ich kann diese Dateien öffnen manuell, und wie ich bereits erwähnt habe, wenn die Datei geöffnet ist, wird der code ausgeführt, ohne Fehler.
Ich vermute, dass die Maschine, dass die Erzeugung dieser etwas falsch macht. Versuchen Sie, die Datei in Excel öffnen, speichern Sie Sie mit unterschiedlichen Dateinamen in Excel 97-2003 xls-format. Legen Sie es auf dem freigegebenen Laufwerk, und versuchen Sie dann mit dieser Datei. Wenn es dann funktioniert, mein Verdacht war richtig. Btw.: Arbeiten Sie mit geöffneten Dateien hat nicht wirklich etwas zu sagen. Wenn Sie öffnen ein test.csv-Datei in Excel, und Sie können auch diese mit ADO und Excel-Treiber.

InformationsquelleAutor L42 | 2014-08-18

Schreibe einen Kommentar