U kunt geen gegevens wijzigen, toevoegen of verwijderen in tabellen die zijn gekoppeld aan een Excel-werkmap in Access

Origineel KB-nummer: 904953

Symptomen

In Microsoft Office Access 2007 of Microsoft Office Access 2003 of in Microsoft Access 2002 kunt u geen gegevens wijzigen, toevoegen of verwijderen in tabellen die zijn gekoppeld aan een Microsoft Excel-werkmap.

Bovendien kan dit gedrag optreden wanneer aan een van de volgende voorwaarden wordt voldaan:

  • U bouwt een query om gegevens op te halen uit tabellen die zijn gekoppeld aan een Excel-werkmap.
  • U bouwt een formulier dat toegang heeft tot gegevens uit tabellen die zijn gekoppeld aan een Excel-werkmap.
  • U gebruikt DAO of ADO om tabellen programmatisch bij te werken die zijn gekoppeld aan een Excel-werkmap.

U ontvangt het volgende bericht wanneer u een query uitvoert om records in een gekoppelde Excel-werkmap bij te werken:

Bewerking moet een bijwerkbare query gebruiken

U ontvangt het volgende bericht wanneer u DAO gebruikt om tabellen die zijn gekoppeld aan een Excel-werkmap programmatisch bij te werken:

Runtimefout '3027' kan niet worden bijgewerkt. Database of object heeft het kenmerk Alleen-lezen.

Wanneer u de gekoppelde gegevens in ADO probeert bij te werken, is het bericht hetzelfde, maar het foutnummer kan er ongeveer als volgt uitzien:

-2147217911 (80040e09)

Wanneer u een query uitvoert om records in te voegen in een Excel-werkmap, ontvangt u het volgende foutbericht, zelfs als de Excel-werkmap niet is gekoppeld aan een Access-database:

Bewerking moet een bijwerkbare query gebruiken

Oorzaak

Dit verwachte gedrag treedt op wanneer aan een van de volgende voorwaarden wordt voldaan:

  • U gebruikt Office Access 2007.
  • U hebt Microsoft Office 2003 Service Pack 2 (SP2) of een hoger servicepack of access 2003-updates geïnstalleerd die zijn uitgebracht na Office 2003 SP2.
  • U hebt de update voor Access 2002 (KB904018) van 18 oktober 2005 geïnstalleerd.
  • U hebt een Access Runtime-toepassing geïnstalleerd die Microsoft Office 2003 Service Pack 2 (SP2) of een hoger servicepack bevat, access 2003-updates die zijn uitgebracht na Office 2003 SP2 of de update voor Access 2002 (KB904018) van 18 oktober 2005 of hoger.

Tijdelijke oplossing

Gebruik een van de volgende methoden om dit verwachte gedrag te omzeilen.

Methode 1: Microsoft Excel gebruiken

Open de gekoppelde Excel-werkmap in Microsoft Excel en breng de wijzigingen aan in de werkmap. Wanneer u de wijzigingen hebt voltooid, slaat u de wijzigingen op en sluit u de werkmap.

Methode 2: Office Access 2007, Access 2003 of Access 2002 gebruiken

Importeer de gekoppelde Excel-werkmap in Access en breng vervolgens uw wijzigingen aan in de gegevens. Wanneer u de wijzigingen hebt voltooid, exporteert u de gegevens als een Excel-.xls-bestand.

Als u de tabel wilt exporteren vanuit Access naar Excel, voert u de volgende code uit in Access.

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

Opmerking

Vervang in dit codevoorbeeld de volgende tijdelijke aanduidingen:

  • <AccessPath>

  • <ExcelPath>

  • <MyQuery>

    <MyQuery> is een tijdelijke aanduiding voor de query die u uitvoert op de tabellen in de Access-database. Het resultaat van de query wordt geëxporteerd naar de Excel-werkmap.

  • <Werkbladen>

    <Werkbladen> is een tijdelijke aanduiding voor het werkblad in Excel waarnaar u het resultaat wilt exporteren. Als u dit codevoorbeeld wilt uitvoeren, drukt u op Ctrl+G om het venster Direct te openen, typt u WorkArounds en drukt u op Enter.

Meer informatie

Vanwege juridische problemen heeft Microsoft de functionaliteit in Access 2003 en in Access 2002 uitgeschakeld waarmee gebruikers de gegevens kunnen wijzigen in gekoppelde tabellen die verwijzen naar een bereik in een Excel-werkmap. Wanneer u wijzigingen echter rechtstreeks in de Excel-werkmap aanbrengt, worden de wijzigingen weergegeven in de gekoppelde tabel in Access.