2017-06-05 33 views
0

ExcelからAccessデータベースのテーブルにテーブルをエクスポートしようとしていますが、「データベースまたはオブジェクトは読み取り専用です」というエラーが発生し続けます。 qestionのコードは次のとおりです。Excelからアクセスエラーへのエクスポート

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を実行しています。ご協力いただきありがとうございます。

+0

'SQLFrom = ...'行は '&dbWS&" "'で終わらないのでしょうか?あなたは私が見ることができない 'dsh'を使用しましたか? – CLR

+0

申し訳ありませんが、私は誤ってその行を削除しました。私は 'dsh'行でコードを編集しました。 –

+0

'Execute'の前に' Debug.Print strQry'を試してみましたか? – CLR

答えて

0

私の検索を続けた後、私は完全に機能する別のアプローチを発見しました。私はこれでこれを見つけた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 
+0

将来この回答を見る人のためのもう1つのメモ。この方法でExcelからDB内のクエリを実行するには、次のコードを使用します: 'DB.qryName'。これは、VBA内で構築されたクエリではなく、データベースで構築され保存されたクエリに対して有効です。 'DB.Execute(" SQLCode ")'を使用して、WBから直接SQLを実行することもできます。私はこれが役立つことを願っています –

関連する問題