2016-09-02 5 views
1

Ich versuche, ein Arbeitsblatt zu Access zu exportieren, wo es in eine vorhandene Tabelle eingefügt wird. Ich habe auf this post, this other post, and this other post verwiesen. Ich erhalte einen Fehler, der in keinem von ihnen angesprochen wurde, der mit VBA-Bibliotheken zusammenhängt, aber etwas völlig anderes sein könnte. Hier ist mein Code:Excel VBA-Export zu Access: ADO-Fehler

Sub ExcelToAccessAdo() 

Dim cn As ADODB.Connection, rs As ADODB.Recordset, row As Long 
Set cn = New ADODB.Connection 
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _ 
     "Data Source=filepath\AccessDB.accdb;" 'this is a different filepath from the real one. 

' open a recordset 
Set rs = New ADODB.Recordset 
rs.Open "Table Export", cn, adOpenKeyset, adLockOptimistic, adCmdTable 

row = 2 ' the start row in the worksheet 
Do While Not IsEmpty(Worksheets("Table Export").Range("A" & row)) 

    With rs 
     .AddNew ' create a new record 
     .Fields("REPTNO") = Worksheets("Table Export").Range("A" & row).Value 
     .Update 
    End With 
    row = row + 1 
Loop 

rs.Close 
Set rs = Nothing 
cn.Close 
Set cn = Nothing 

End Sub 

Der Name des Arbeitsblatts und Access Name der Tabelle sind identisch. Auch die .Fields("REPTNO") Linie ist direkt von der Post der anderen Person, so dass ich nicht weiß, ob ich es ändern muss oder nicht.

Der Fehler ist Run-time error '-2147217900 (80040e14)': Syntax error in FROM clause.

auf der Linie rs.Open "Table Export", cn, adOpenKeyset, adLockOptimistic, adCmdTable.

Dies ist ein merkwürdiger Fehler, da es wie ein Fehler aussieht, den ich beim Ausführen von SQL bekommen würde, aber ich nehme an, es gibt Hintergrund SQL mit einer INSERT INTO Klausel. Welches ist möglicherweise eine Art von Dateipfadproblem mit Excel? Irgendeine Hilfe?

Hier sind meine Bibliothek Referenzen:

  • Microsoft Excel 14.0 Object Library
  • OLE Automation
  • Microsoft Office 14.0 Object Library
  • Microsoft Forms 2.0 Object Library
  • Microsoft ActiveX Data Objects 6.1 Bibliothek
  • Microsoft ActiveX Data Objects Recordset 6.0 Bibliothek
+1

Ich werde, dass Sie wahrscheinlich ein paar eckigen Klammern um die Tabellennamen in der 'rs.open' Aussage werfen sollten erraten. Ich bin mir da nicht 100% ig sicher, da ich SQL-Anweisungen im Allgemeinen nur über 'rs.open' ausstelle. Geben Sie eine Aufnahme: 'rs.Open" [Table Export] ", cn, adOpenKeyset, adLockOptimistic, adCmdTable' und sehen Sie, ob es den Trick macht. – JNevill

+0

Ja, das war's! Ich fühle mich, als hätte ich das tun sollen ... Willst du eine Antwort einreichen und ich werde es richtig markieren, oder soll ich? – plankton

Antwort

0

Dank @JNevill die darauf hinwies, ich brauche nur eckige Klammern zu verwenden:

rs.Open "[Table Export]", cn, adOpenKeyset, adLockOptimistic, adCmdTable

+1

Tatsächlich sollte jeder Tabellenname mit einem Leerzeichen/Sonderzeichen in eckige Klammern eingeschlossen werden (und als bewährte Methoden sollten niemals Sonderzeichen oder Leerzeichen in Tabellen- oder Feldnamen enthalten sein). Außerdem sollten Tabellennamen verwendet werden, die [reservierte Wörter] verwenden (https://support.office.com/de-de/article/Access-2007-reserved-words-and-symbole-e33eb3a9-8baa-4335-9f57-da237c63eabe) Klammern. – Parfait

0

Versuchen weg in jedem Objektname (Tabellen, FIELD_NAMES, Formulare, Berichte, etc von Räumen zu bleiben .). Sie können dies tun, aber wie Sie sehen können, wird es mehr Zeit und unnötige Frustration verursachen, um Dinge zu normalisieren. Verwenden Sie keine reservierten Wörter in Ihrem Code.

https://support.microsoft.com/en-us/kb/286335

Verwandte Themen