从Excel导出到Access错误

从Excel导出到Access错误,excel,ms-access-2010,vba,Excel,Ms Access 2010,Vba,我试图将Excel中的表导出到Access数据库中的表,但不断收到错误“数据库或对象为只读”。下面是qestion中的代码 dbWB = Application.ActiveWorkbook.FullName dbWS = Application.ActiveSheet.Name dsh = "[" & dbWS & "$]" Set DB = CreateObject("ADODB.Connection") dbPath = "\\Co

我试图将Excel中的表导出到Access数据库中的表,但不断收到错误“数据库或对象为只读”。下面是qestion中的代码

    dbWB = Application.ActiveWorkbook.FullName
    dbWS = Application.ActiveSheet.Name
    dsh = "[" & dbWS & "$]"

    Set DB = CreateObject("ADODB.Connection")
    dbPath = "\\Corpaa.aa.com\CampusHome\IOCADHome02\758673\Projects\Global Analysis Tool\MX Analysis DB\Global Line MX Hub Review DB.accdb"
    scn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath

    DB.Open scn

    DB.Execute "DELETE * FROM tblNewSchedule;"

    SQLInsert = "INSERT INTO tblNewSchedule "
    SQLSelect = "SELECT * "
    SQLFrom = "FROM [Excel 8.0; HDR=YES; DATABASE= " & dbWB & "]." & dsh & " "

    strQry = SQLInsert & SQLSelect & SQLFrom & ";"
   DB.Execute strQry
   DB.Close

DELETE
qry执行得很好,没有错误。问题在于strQry的执行。我相信它是引用WB是只读的,但是我正在运行WB中的代码。我正在运行Office 2010。谢谢您的帮助。

因此,在继续我的搜索之后,我发现了另一种非常有效的方法。我在这上面找到的

    dbWB = Application.ActiveWorkbook.FullName
    dbWS = Application.ActiveSheet.Name
    dsh = "[" & dbWS & "$]"

    Set DB = CreateObject("ADODB.Connection")
    dbPath = "\\Corpaa.aa.com\CampusHome\IOCADHome02\758673\Projects\Global Analysis Tool\MX Analysis DB\Global Line MX Hub Review DB.accdb"
    scn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath

    DB.Open scn

    Dim rs As ADODB.Recordset
    Dim r As Long
    Dim y As Long

    y = TWB.Cells(1, 1).End(xlDown).Row
    r = TWB.Cells(1, 1).End(xlToRight).Column

    DB.Execute "DELETE * FROM tblNewSchedule;"
    Set rs = New ADODB.Recordset
    rs.Open "tblNewSchedule", DB, adOpenKeyset, adLockOptimistic, adCmdTable

    For i = 2 To y
        With rs
            .AddNew
                For j = 1 To r
                    fName = TWB.Cells(1, j)
                    fData = TWB.Cells(i, j)
                    .Fields(fName) = fData
                Next j
        End With
    Next i

   DB.Close
这是我的新工作代码。谢谢你的帮助

    dbWB = Application.ActiveWorkbook.FullName
    dbWS = Application.ActiveSheet.Name
    dsh = "[" & dbWS & "$]"

    Set DB = CreateObject("ADODB.Connection")
    dbPath = "\\Corpaa.aa.com\CampusHome\IOCADHome02\758673\Projects\Global Analysis Tool\MX Analysis DB\Global Line MX Hub Review DB.accdb"
    scn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath

    DB.Open scn

    Dim rs As ADODB.Recordset
    Dim r As Long
    Dim y As Long

    y = TWB.Cells(1, 1).End(xlDown).Row
    r = TWB.Cells(1, 1).End(xlToRight).Column

    DB.Execute "DELETE * FROM tblNewSchedule;"
    Set rs = New ADODB.Recordset
    rs.Open "tblNewSchedule", DB, adOpenKeyset, adLockOptimistic, adCmdTable

    For i = 2 To y
        With rs
            .AddNew
                For j = 1 To r
                    fName = TWB.Cells(1, j)
                    fData = TWB.Cells(i, j)
                    .Fields(fName) = fData
                Next j
        End With
    Next i

   DB.Close

您的
SQLFrom=…
行是否应该结束
&dbWS&“
?您使用了我看不到的
dsh
?对不起,我不小心删除了那一行。我已经用
dsh
行编辑了代码。在
Execute
之前,您是否尝试过
Debug.Print strQry
检查是否有任何明显的问题?我没有看到任何问题。这是调试的结果。打印<代码>插入tblNewSchedule从[Excel 8.0;HDR=YES;DATABASE=\\Corpaa.aa.com\CampusHome\IOCADHome02\758673\Global Line MX analysis Prep Tool-MMR Version 00 08-21-16.xlsm]。[LastTranschedule$]是的,看起来不错。问题是,它是否无法从Excel中读取数据,或将数据写入Access?您是否可以尝试在不使用
SQLInsert
部分的情况下执行
DB.Execute
,以便它只尝试读取/选择数据?如果它出错了,那么至少你已经缩小了它的范围。?这是任何人在未来寻找答案的另一个注意事项。要使用此方法从Excel在数据库中运行查询,请使用以下代码:
DB.qryName
。这适用于在数据库中生成和保存的查询,而不是在VBA中生成的查询。您还可以直接从WB运行SQL,也可以使用:
DB.Execute(“SQLCode”)
。我希望这有帮助。