2017-06-05 3 views
0

Ich versuche, eine Tabelle aus Excel in eine Tabelle in einer Access DB zu exportieren, aber ich erhalte immer einen Fehler "Datenbank oder Objekt ist schreibgeschützt". Hier ist der Code in Frage.Exportieren von Excel zu Access-Fehler

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 

Die DELETE qry führt gerade gut ohne Fehler aus. Das Problem ist die strQry Ausführung. Ich glaube, dass es darauf hinweist, dass der WB schreibgeschützt ist, aber ich verwende den Code aus dem WB. Ich betreibe Office 2010. Vielen Dank für Ihre Unterstützung.

+0

Sollte Ihre 'SQLFrom = ...' Zeile nicht enden '& dbWS &" "'? Du hast 'dsh' benutzt, was ich nicht sehen kann? – CLR

+0

Entschuldigung, ich habe versehentlich diese Zeile gelöscht. Ich habe den Code mit der 'dsh' Zeile bearbeitet. –

+0

Haben Sie 'Debug.Print strQry' vor dem' Execute' versucht, nach etwas Offensichtlichem zu suchen? – CLR

Antwort

0

Also, nachdem ich meine Suche fortsetzte, entdeckte ich einen anderen Ansatz, der perfekt funktionierte. Ich fand es auf diesem here

Hier ist mein neuer Arbeitscode. Danke für die Hilfe.

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

Ein weiterer Hinweis für alle, die in Zukunft nach Antworten suchen. Verwenden Sie den folgenden Code, um Abfragen in der Datenbank von Excel mit dieser Methode auszuführen: 'DB.qryName'. Dies funktioniert für Abfragen, die in der DataBase erstellt und gespeichert wurden, nicht für solche, die in VBA erstellt wurden. Sie können das SQL auch direkt aus dem WB ausführen: 'DB.Execute (" SQLCode ")'. Ich hoffe das hilft. –

Verwandte Themen