2016-09-02 6 views
1

Я пытаюсь экспортировать рабочий лист в Access, где он будет вставляться в существующую таблицу. Я ссылался на this post, this other post, and this other post. Я получаю сообщение об ошибке, которое не рассматривалось ни в одном из них, которое, я думаю, может быть связано с библиотеками VBA, но может быть чем-то совершенно другим. Вот мой код:Excel VBA Export to Access: ошибка ADO

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 

Имя рабочего листа и имя таблицы доступа одинаковы. Также линия .Fields("REPTNO") находится прямо из сообщения другого человека, поэтому я не знаю, буду ли я менять ее или нет.

Ошибка Run-time error '-2147217900 (80040e14)': Syntax error in FROM clause.

на линии rs.Open "Table Export", cn, adOpenKeyset, adLockOptimistic, adCmdTable.

Это странная ошибка, так как это похоже на ошибку, которую я получал при запуске SQL, но я предполагаю, что существует некоторый фоновый SQL-процесс с предложением INSERT INTO. Который, возможно, это какой-то тип пути к файлу с Excel? Любая помощь?

Вот моя библиотека Ссылка:

  • Microsoft Excel Библиотека 14,0 Объекта
  • OLE Automation
  • Microsoft Office Библиотека 14,0 Объекта
  • Microsoft Forms Library 2.0 Object
  • Microsoft ActiveX Data Objects 6.1 Библиотека
  • Microsoft ActiveX Data Objects Recordset 6.0 Библиотека
+1

Я собираюсь предположить, что вы, вероятно, следует бросить некоторые квадратные скобки вокруг вашего имени таблицы в 'rs.open' заявлении. Я не уверен на 100%, потому что я вообще только выдает SQL-заявления через 'rs.open'. Сделайте снимок: «rs.Open» [Table Export] », cn, adOpenKeyset, adLockOptimistic, adCmdTable' и посмотрите, не делает ли это трюк. – JNevill

+0

Да, это было! Я чувствую, что должен был это сделать ... Вы хотите отправить ответ, и я отметю его правильно, или я должен? – plankton

ответ

0

Благодаря @JNevill, который указал мне просто нужно использовать квадратные скобки:

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

+1

Действительно, любое имя таблицы с пробелом/специальными символами должно быть заключено в скобки (и в качестве лучших практик - никогда не включать специальные символы или пробелы в именах таблиц или полей). Кроме того, имена таблиц с использованием [зарезервированных слов] (https://support.office.com/en-us/article/Access-2007-reserved-words-and-symbols-e33eb3a9-8baa-4335-9f57-da237c63eabe) должны использовать кронштейны. – Parfait

0

стараются держаться подальше от пространства в любом имени объекта (таблицы, FIELD_NAMES, формы, отчеты и т.д. .). Вы можете это сделать, но, как вы можете сказать, это приведет к увеличению времени и ненужных разочарований в нормализации ситуации. Кроме того, не используйте зарезервированные слова в своем коде.

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