Sie können keine Daten in Tabellen ändern, hinzufügen oder löschen, die mit einer Excel-Arbeitsmappe in Access verknüpft sind.

Ursprüngliche KB-Nummer: 904953

Symptome

In Microsoft Office Access 2007 oder Microsoft Office Access 2003 oder Microsoft Access 2002 können Sie keine Daten in Tabellen ändern, hinzufügen oder löschen, die mit einer Microsoft Excel-Arbeitsmappe verknüpft sind.

Darüber hinaus kann dieses Verhalten auftreten, wenn eine der folgenden Bedingungen zutrifft:

  • Sie erstellen eine Abfrage, um Daten aus Tabellen abzurufen, die mit einer Excel-Arbeitsmappe verknüpft sind.
  • Sie erstellen ein Formular, das auf Daten aus Tabellen zugreift, die mit einer Excel-Arbeitsmappe verknüpft sind.
  • Sie verwenden DAO oder ADO, um Tabellen programmgesteuert zu aktualisieren, die mit einer Excel-Arbeitsmappe verknüpft sind.

Sie erhalten die folgende Meldung, wenn Sie eine Abfrage zum Aktualisieren von Datensätzen in einer verknüpften Excel-Arbeitsmappe ausführen:

Der Vorgang muss eine aktualisierbare Abfrage verwenden.

Sie erhalten die folgende Meldung, wenn Sie DAO verwenden, um Tabellen, die mit einer Excel-Arbeitsmappe verknüpft sind, programmgesteuert zu aktualisieren:

Laufzeitfehler "3027" kann nicht aktualisiert werden. Datenbank oder Objekt ist schreibgeschützt.

Wenn Sie versuchen, die verknüpften Daten in ADO zu aktualisieren, ist die Meldung identisch, aber die Fehlernummer kann der folgenden ähneln:

-2147217911 (80040e09)

Wenn Sie eine Abfrage ausführen, um Datensätze in eine Excel-Arbeitsmappe einzufügen, erhalten Sie die folgende Fehlermeldung, auch wenn die Excel-Arbeitsmappe nicht mit einer Access-Datenbank verknüpft ist:

Der Vorgang muss eine aktualisierbare Abfrage verwenden.

Ursache

Dieses erwartete Verhalten tritt auf, wenn eine der folgenden Bedingungen zutrifft:

  • Sie verwenden Office Access 2007.
  • Sie haben Microsoft Office 2003 Service Pack 2 (SP2) oder ein höheres Service Pack oder access 2003-Updates installiert, die nach Office 2003 SP2 veröffentlicht wurden.
  • Sie haben das Update für Access 2002 (KB904018) vom 18. Oktober 2005 installiert.
  • Sie haben eine Access-Laufzeitanwendung installiert, die Microsoft Office 2003 Service Pack 2 (SP2) oder ein höheres Service Pack, alle Access 2003-Updates, die nach Office 2003 SP2 veröffentlicht wurden, oder das Update für Access 2002 (KB904018) vom 18. Oktober 2005 oder höher enthält.

Problemumgehung

Verwenden Sie eine der folgenden Methoden, um dieses erwartete Verhalten zu umgehen.

Methode 1: Verwenden von Microsoft Excel

Öffnen Sie die verknüpfte Excel-Arbeitsmappe in Microsoft Excel, und nehmen Sie dann Ihre Änderungen an der Arbeitsmappe vor. Wenn Sie die Änderungen abgeschlossen haben, speichern Sie die Änderungen, und schließen Sie dann die Arbeitsmappe.

Methode 2: Verwenden von Office Access 2007, Access 2003 oder Access 2002

Importieren Sie die verknüpfte Excel-Arbeitsmappe in Access, und nehmen Sie dann Ihre Änderungen an den Daten vor. Wenn Sie die Änderungen abgeschlossen haben, exportieren Sie die Daten als Excel-.xls-Datei.

Führen Sie den folgenden Code in Access aus, um die Tabelle aus Access nach Excel zu exportieren.

Public Sub WorkArounds()
On Error GoTo Leave

Dim strSQL, SQL As String
    Dim Db As ADODB.Connection
    Set Db = New ADODB.Connection
    Db.CursorLocation = adUseClient
    Db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=<AccessPath>"
    'Note: In Office Access 2007, use the following line of code:
    'Db.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=<AccessPath>"
    SQL = "<MyQuery>"
    CopyRecordSetToXL SQL, Db
    Db.Close
    MsgBox "Access has successfully exported the data to excel file.", vbInformation, "Export Successful."
    Exit Sub
Leave:
        MsgBox Err.Description, vbCritical, "Error"
        Exit Sub
End Sub

Private Sub CopyRecordSetToXL(SQL As String, con As ADODB.Connection)
    Dim rs As New ADODB.Recordset
    Dim x
    Dim i As Integer, y As Integer
    Dim xlApp As Excel.Application
    Dim xlwbBook As Excel.Workbook, xlwbAddin As Excel.Workbook
    Dim xlwsSheet As Excel.Worksheet
    Dim rnData As Excel.Range
    Dim stFile As String, stAddin As String
    Dim rng As Range
    stFile = "<ExcelPath>"
    'Instantiate a new session with the COM-Object Excel.exe.
    Set xlApp = New Excel.Application
    Set xlwbBook = xlApp.Workbooks.Open(stFile)
    Set xlwsSheet = xlwbBook.Worksheets("<WorkSheets>")
    xlwsSheet.Activate
    'Getting the first cell to input the data.
    xlwsSheet.Cells.SpecialCells(xlCellTypeLastCell).Select
    y = xlApp.ActiveCell.Column - 1
    xlApp.ActiveCell.Offset(1, -y).Select
    x = xlwsSheet.Application.ActiveCell.Cells.Address
    'Opening the recordset based on the SQL query and saving the data in the Excel worksheet.
    rs.CursorLocation = adUseClient
    If rs.State = adStateOpen Then
        rs.Close
    End If
    rs.Open SQL, con
    If rs.RecordCount > 0 Then
        rs.MoveFirst
        x = Replace(x, "$", "")
        y = Mid(x, 2)
        Set rng = xlwsSheet.Range(x)
        xlwsSheet.Range(x).CopyFromRecordset rs
    End If
    xlwbBook.Close True
    xlApp.Quit
    Set xlwsSheet = Nothing
    Set xlwbBook = Nothing
    Set xlApp = Nothing

End Sub

Hinweis

Ersetzen Sie in diesem Codebeispiel die folgenden Platzhalter:

  • <AccessPath>

  • <ExcelPath>

  • <MyQuery>

    <MyQuery> ist der Platzhalter für die Abfrage, die Sie für die Tabellen in der Access-Datenbank ausführen. Das Ergebnis der Abfrage wird in die Excel-Arbeitsmappe exportiert.

  • <Arbeitsblätter>

    <WorkSheets> ist ein Platzhalter für das Arbeitsblatt in Excel, in das Sie das Ergebnis exportieren möchten. Um dieses Codebeispiel auszuführen, drücken Sie STRG+G, um das Direktfenster zu öffnen, geben Sie WorkArounds ein, und drücken Sie dann die EINGABETASTE.

Weitere Informationen

Aufgrund rechtlicher Probleme hat Microsoft die Funktionalität in Access 2003 und in Access 2002 deaktiviert, mit der Benutzer die Daten in verknüpften Tabellen ändern können, die auf einen Bereich in einer Excel-Arbeitsmappe verweisen. Wenn Sie änderungen jedoch direkt in der Excel-Arbeitsmappe vornehmen, werden die Änderungen in der verknüpften Tabelle in Access angezeigt.