Du kan inte ändra, lägga till eller ta bort data i tabeller som är länkade till en Excel-arbetsbok i Access
Ursprungligt KB-nummer: 904953
Symptom
I Microsoft Office Access 2007 eller Microsoft Office Access 2003 eller Microsoft Access 2002 kan du inte ändra, lägga till eller ta bort data i tabeller som är länkade till en Microsoft Excel-arbetsbok.
Dessutom kan du uppleva det här beteendet när något av följande villkor är sant:
- Du skapar en fråga för att hämta data från tabeller som är länkade till en Excel-arbetsbok.
- Du skapar ett formulär som kommer åt data från tabeller som är länkade till en Excel-arbetsbok.
- Du använder DAO eller ADO för att uppdatera tabeller programmässigt som är länkade till en Excel-arbetsbok.
Du får följande meddelande när du utför en fråga för att uppdatera poster i en länkad Excel-arbetsbok:
Åtgärden måste använda en uppdateringsbar fråga
Du får följande meddelande när du använder DAO för att programmatiskt uppdatera tabeller som är länkade till en Excel-arbetsbok:
Körningsfelet 3027 kan inte uppdateras. Databasen eller objektet är skrivskyddat.
När du försöker uppdatera länkade data i ADO är meddelandet detsamma, men felnumret kan likna följande:
-2147217911 (80040e09)
När du kör en fråga för att infoga poster i en Excel-arbetsbok får du följande felmeddelande även om Excel-arbetsboken inte är länkad till en Access-databas:
Åtgärden måste använda en uppdateringsbar fråga
Orsak
Det här förväntade beteendet inträffar när något av följande villkor är sant:
- Du använder Office Access 2007.
- Du har installerat Microsoft Office 2003 Service Pack 2 (SP2) eller ett senare service pack eller access 2003-uppdateringar som släpptes efter Office 2003 SP2.
- Du har installerat uppdateringen för Access 2002 (KB904018) som är daterad den 18 oktober 2005.
- Du har installerat ett Access Runtime-program som innehåller Microsoft Office 2003 Service Pack 2 (SP2) eller ett senare service pack, alla Access 2003-uppdateringar som släpptes efter Office 2003 SP2 eller uppdateringen för Access 2002 (KB904018) som är daterad den 18 oktober 2005 eller senare.
Lösning
Använd någon av följande metoder för att kringgå det här förväntade beteendet.
Metod 1: Använd Microsoft Excel
Öppna den länkade Excel-arbetsboken i Microsoft Excel och gör sedan dina ändringar i arbetsboken. När du har slutfört ändringarna sparar du ändringarna och stänger sedan arbetsboken.
Metod 2: Använd Office Access 2007, Access 2003 eller Access 2002
Importera den länkade Excel-arbetsboken till Access och gör sedan dina ändringar i data. När du har slutfört ändringarna exporterar du data som en Excel-.xls fil.
Om du vill exportera tabellen från Access till Excel kör du följande kod i 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
Obs!
I det här kodexemplet ersätter du följande platshållare:
<AccessPath>
<ExcelPath>
<MyQuery>
<MyQuery> är platshållare för frågan som du kör mot tabellerna i Access-databasen. Resultatet av frågan exporteras till Excel-arbetsboken.
<Kalkylblad>
<WorkSheets> är en platshållare för kalkylbladet i Excel som du vill exportera resultatet till. Om du vill köra det här kodexemplet trycker du på CTRL+G för att öppna fönstret Omedelbart , skriver WorkArounds och trycker sedan på RETUR.
Mer information
På grund av juridiska problem har Microsoft inaktiverat funktionerna i Access 2003 och i Access 2002 som låter användare ändra data i länkade tabeller som pekar på ett intervall i en Excel-arbetsbok. Men när du gör ändringar direkt i Excel-arbetsboken visas ändringarna i den länkade tabellen i Access.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för