VBA - SQL 从 Excel Sheet 导入以访问数据库 - 执行错误 3343

VBA - SQL Import From Excel Sheet To Access DB - EXECUTION ERROR 3343

我想构建一个 SQL 请求,以便将我所有的 sheet 内容存储到一个访问数据库中,为此我构建了以下请求:

 sSQL = "INSERT INTO Archive_FP21 (Date_Histo,Caisse,Libelle,Reference_Contrat,Date_de_Nego,Date_Valeur,Echeance_Finale,Libelle_Index,Taux_Actuel,Capital_Origine,Capital_Restant_Du,Marge,Taux_du_cap,Taux_du_Floor,Derniere_Echance_INT,Derniere_Echeance_AMO,Interet,Prochaine_Echeance) " & _
    "SELECT * FROM [Feuil1$A:R] IN """ & WbPath & """"

但我面临以下问题:

3343 unrecognized database format

[I feel like my issue is in FROM [Feuil1$A:R] IN """ & WbPath & """"]

下面是我的完整代码 Sub :

Sub archiver()
    
    Dim ws As DAO.Workspace
    Dim db As DAO.Database
    Dim sDb As String
    Dim sSQL As String
    Dim qdf As QueryDef
    Dim WbPath As String

    
WbPath = "C:\******\Extraction FP21 Mise en Forme Auto102020 - Copie.xlsx"

sDb = "C:\******\BaseFp21.accdb"
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(sDb)

sSQL = "INSERT INTO Archive_FP21 (Date_Histo,Caisse,Libelle,Reference_Contrat,Date_de_Nego,Date_Valeur,Echeance_Finale,Libelle_Index,Taux_Actuel,Capital_Origine,Capital_Restant_Du,Marge,Taux_du_cap,Taux_du_Floor,Derniere_Echance_INT,Derniere_Echeance_AMO,Interet,Prochaine_Echeance) " & _
"SELECT * FROM [Feuil1$A:R] IN """ & WbPath & """"


db.Execute sSQL

End Sub

注意 此 SQL 请求的目标是添加来自 sheet 'Feui1.Range(A:R)` 的所有数据进入我的访问 Table。 我无法逐行完成,因为我有 37K 行来填写 Access。

我错过了什么?您将如何使用 VBA 填充 Access DB 中 excel 的 37K 行?

通过 Access 连接从 Excel 工作簿内联查询不使用 IN 运算符,而是使用括号内的标识符和设置参数,例如 headers 和工作簿类型。如果您正在查询外部 Access 数据库,但作为 Excel 工作簿,无法识别数据库格式,IN 就可以正常工作。

sSQL = "INSERT INTO Archive_FP21 (Date_Histo, Caisse, Libelle, Reference_Contrat," _
        & "                       Date_de_Nego, Date_Valeur, Echeance_Finale, " _
        & "                       Libelle_Index, Taux_Actuel, Capital_Origine, " _
        & "                       Capital_Restant_Du, Marge, Taux_du_cap, Taux_du_Floor, " _ 
        & "                       Derniere_Echance_INT, Derniere_Echeance_AMO, Interet, " _
        & "                       Prochaine_Echeance) " _
        & " SELECT * FROM [Excel 12.0 Xml;HDR=Yes;Database=" & WbPath & "].[Feuil1$A:R]"

db.Execute sSQL

此外,请务必避免使用 SELECT * FROM 和显式 select 命名列,尤其是在 insert-select 追加 column-to-column 映射的查询中。 SELECT Col1, Col2, Col3, ... FROM 更具可读性和可维护性,以防 Excel 列顺序应该调整或某些列不再存在。