【问题标题】:Exporting from Excel to Access error从 Excel 导出到 Access 错误
【发布时间】:2017-06-06 00:05:39
【问题描述】:

我正在尝试将表格从 Excel 导出到 Access DB 中的表格,但我不断收到错误消息“数据库或对象是只读的”。这是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。感谢您的帮助。

【问题讨论】:

  • 您的SQLFrom = ... 行不应该以& dbWS & " " 结尾吗?你用过dsh,我看不到?
  • 对不起,我不小心删除了那行。我已经用dsh 行编辑了代码。
  • 您是否在Execute 之前尝试过Debug.Print strQry 来检查任何明显的东西?
  • 我没有看到任何问题。这是Debug.Print 的结果。 INSERT INTO tblNewSchedule SELECT * FROM [Excel 8.0; HDR=YES; DATABASE= \\Corpaa.aa.com\CampusHome\IOCADHome02\758673\Global Line MX Analyzing Prep Tool - MMR Version 00 08-21-16.xlsm].[LastRanSchedule$];
  • 是的,看起来不错。问题是,它无法从 Excel 中读取数据,还是无法将数据写入 Access?您可以尝试不带SQLInsert 部分的DB.Execute,以便它只是尝试读取/选择数据吗?如果它出错,那么至少你已经缩小了范围..?

标签: excel ms-access-2010 vba


【解决方案1】:

所以,在继续搜索之后,我发现了一种非常有效的不同方法。我在这个here 上找到了它

这是我的新工作代码。感谢您的帮助。

    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

【讨论】:

  • 对任何人在未来寻找答案的另一个注意事项。要使用这种方法在 Excel 中运行数据库中的查询,请使用以下代码:DB.qryName。这适用于在数据库中构建和保存的查询,而不是在 VBA 中构建的查询。您也可以直接从 WB 运行 SQL,也可以使用:DB.Execute ("SQLCode")。我希望这会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2011-10-04
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多