【问题标题】:Export Named Table from Excel to Access将命名表从 Excel 导出到 Access
【发布时间】:2020-06-09 20:33:45
【问题描述】:

好的。很抱歉浪费了大家的时间。就像一个 DUMMY 一样,我首先没有想到简单的解决方案。我正在处理的数据量并不太大,实际上只需导出到 excel 文件(我很确定)会更好。我要感谢所有帮助过的人(June7、Parfait 和 HansUp)。到目前为止,你们(这个论坛上的每个人)给予的支持让我的工作变得更轻松了。


我正在尝试将 Excel 表格从我的活动 Excel 文件导出到 Access 数据库文件。 我在

处遇到错误

“con.execute sql”

“运行时错误 '-2147467259 (80004005)': [Microsoft][ODBC Microsoft Access Driver] 查询输入必须至少包含一个表或查询。”

Sub updateAccess()

Dim con As New ADODB.Connection
Dim connectionString As String

Dim sql, newTable As String
Filename = "C:\Desktop\Quote-Size_Contacts.accdb"
connectionString = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" & Filename

con.Open connectionString

' Save current table ("ContactsTbl_Data") to another table ("ContactsTbl_Data_yyyymmdd_hh_mmss")
newTable = "Quote-Size_Contacts_" & Format(Date, "yyyymmdd") & "_" & Format(Now, "hhmmss")
sql = "SELECT CODE, STORE INTO " & newTable & "FROM ContactsTbl_Data"
con.Execute sql

' Delete rows of current table ("ContactsTbl_Data")
sql = "DELETE FROM ContactsTbl_Data"
con.Execute sql

' Insert new rows into current table ("ContactsTbl_Data") from my Excel Sheet
sql = "INSERT INTO ContactsTbl_Data ([CODE], [STORE]) " & _
      "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & ThisWorkbook.FullName & "].[" & ThisWorkbook.Sheets("Sheet2").Name & "$]"
con.Execute sql

con.Close
Set con = Nothing

End Sub

编辑:: 我不确定这些论坛关于清理代码和提出更多问题的标准协议,所以我将在这里添加“编辑”。 我应用了这些建议并将它试图保存到我的访问文件的字段匹配。我现在收到错误:“对象'_Connection'的方法'执行'失败”

Public Sub updateAccess()

Dim con As New ADODB.Connection
Dim connectionString As String

Dim sql, newTable As String
Filename = "C:\Desktop\Quote-Size_Contacts.accdb"
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" & Filename & "'"

con.Open connectionString

' Save current table ("ContactsTbl_Data") to another table ("ContactsTbl_Data_yyyymmdd_hh_mmss")
newTable = "Quote-Size_Contacts_" & Format(Date, "yyyymmdd") & "_" & Format(Now, "hhmmss")
sql = "SELECT Company, Contact, Initials, Position, Address, AddressContd, CityStatePost, MainNo, CellNo, FaxNo, Email INTO [" & newTable & "] FROM ContactsTbl_Data"
con.Execute sql

' Delete rows of current table ("ContactsTbl_Data")
sql = "DELETE FROM ContactsTbl_Data"
con.Execute sql

' Insert new rows into current table ("ContactsTbl_Data") from my Excel Sheet
sql = "INSERT INTO ContactsTbl_Data ([Company], [Contact], [Initials], [Position], [Address], [AddressContd], [CityStatePost], [MainNo], [CellNo], [FaxNo], [Email]) " & _
      "SELECT * FROM [Excel 12.0 Xml;HDR=Yes;Database=" & ThisWorkbook.FullName & "].[" & ThisWorkbook.Sheets("Sheet2").Name & "$]"
con.Execute sql

con.Close
Set con = Nothing

End Sub

【问题讨论】:

  • 我尝试了另一个代码,它实际上打开了数据库文件,就像它会做某事一样,但后来我收到错误:“找不到可安装的 ISAM。”
  • 您的 Excel 文件是.xls 还是.xlsx 格式?
  • 它是 .xlsm 格式
  • 然后使用:[Excel 12.0 Xml;HDR=Yes;Database=...
  • 我从一个 xlsm 文件中测试了 8.0 代码,并且 SQL 成功执行,但随后我的计算机崩溃了。

标签: excel vba ms-access export


【解决方案1】:

看看这是否有帮助。

表名有连字符 (-),所以使用 [ ] 字符来分隔。在 FROM 前面添加一个空格,这样文本就不会在编译的 SQL 字符串中一起运行。

sql = "SELECT CODE, STORE INTO [" & newTable & "] FROM ContactsTbl_Data"

至于Access数据库的连接,别以为我没用过也没见过Driver,我用的是Provider:
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" & Filename & "'"

【讨论】:

  • con.execute sql 仍然突出显示,但出现新错误:“[Microsoft][ODBC Microsoft Access Driver] 参数太少”
  • 查看修改后的答案。
  • 您确定在FROM 子句之前有一个空格,如此答案所示,但不是您的原始答案。否则,查询表明ContactsTbl_Data 表中可能没有CODESTORE 列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多