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.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor