Nie można zmieniać, dodawać ani usuwać danych w tabelach połączonych ze skoroszytem programu Excel w programie Access
Oryginalny numer KB: 904953
Symptomy
W programie Microsoft Office Access 2007 lub Microsoft Office Access 2003 lub Microsoft Access 2002 nie można zmieniać, dodawać ani usuwać danych w tabelach połączonych ze skoroszytem programu Microsoft Excel.
Ponadto może wystąpić to zachowanie, gdy spełniony jest jeden z następujących warunków:
- Tworzysz zapytanie w celu pobierania danych z tabel połączonych ze skoroszytem programu Excel.
- Tworzysz formularz, który uzyskuje dostęp do danych z tabel połączonych ze skoroszytem programu Excel.
- Programowe aktualizowanie tabel połączonych ze skoroszytem programu Excel przy użyciu funkcji DAO lub ADO.
Podczas wykonywania zapytania w celu zaktualizowania rekordów w połączonym skoroszycie programu Excel zostanie wyświetlony następujący komunikat:
Operacja musi używać kwerendy z możliwością aktualizacji
Gdy używasz obiektu DAO do programowego aktualizowania tabel połączonych ze skoroszytem programu Excel, zostanie wyświetlony następujący komunikat:
Nie można zaktualizować błędu środowiska uruchomieniowego "3027". Baza danych lub obiekt jest tylko do odczytu.
Podczas próby zaktualizowania połączonych danych w usłudze ADO komunikat jest taki sam, ale numer błędu może być podobny do następującego:
-2147217911 (80040e09)
Po uruchomieniu zapytania w celu wstawienia rekordów do skoroszytu programu Excel zostanie wyświetlony następujący komunikat o błędzie, nawet jeśli skoroszyt programu Excel nie jest połączony z bazą danych programu Access:
Operacja musi używać kwerendy z możliwością aktualizacji
Przyczyna
To oczekiwane zachowanie występuje, gdy spełniony jest jeden z następujących warunków:
- Używasz programu Office Access 2007.
- Zainstalowano pakiet Microsoft Office 2003 z dodatkiem Service Pack 2 (SP2) lub nowszy lub wszelkie aktualizacje programu Access 2003 wydane po pakiecie Office 2003 z dodatkiem SP2.
- Zainstalowano aktualizację programu Access 2002 (KB904018) z dnia 18 października 2005 r.
- Zainstalowano aplikację środowiska uruchomieniowego programu Access zawierającą pakiet Microsoft Office 2003 z dodatkiem Service Pack 2 (SP2) lub nowszy, wszelkie aktualizacje programu Access 2003 wydane po pakiecie Office 2003 z dodatkiem SP2 lub aktualizację programu Access 2002 (KB904018) z dnia 18 października 2005 r. lub nowszą.
Obejście problemu
Aby obejść to oczekiwane zachowanie, użyj jednej z następujących metod.
Metoda 1. Używanie programu Microsoft Excel
Otwórz połączony skoroszyt programu Excel w programie Microsoft Excel, a następnie wprowadź zmiany w skoroszycie. Po zakończeniu zmian zapisz zmiany, a następnie zamknij skoroszyt.
Metoda 2. Używanie programu Office Access 2007, Access 2003 lub Access 2002
Zaimportuj połączony skoroszyt programu Excel do programu Access, a następnie wprowadź zmiany w danych. Po zakończeniu zmian wyeksportuj dane jako plik .xls programu Excel.
Aby wyeksportować tabelę z programu Access do programu Excel, uruchom następujący kod w programie 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
Uwaga
W tym przykładzie kodu zastąp następujące symbole zastępcze:
<AccessPath>
<ExcelPath>
<MyQuery>
<MyQuery jest symbolem zastępczym> zapytania uruchamiane względem tabel w bazie danych programu Access. Wynik zapytania jest eksportowany do skoroszytu programu Excel.
<Arkuszy>
<Arkusze to symbol zastępczy arkusza w programie Excel, do którego chcesz wyeksportować> wynik. Aby uruchomić ten przykład kodu, naciśnij klawisze CTRL+G, aby otworzyć okno Natychmiastowe , wpisz WorkArounds, a następnie naciśnij klawisz ENTER.
Więcej informacji
Z powodu problemów prawnych firma Microsoft wyłączyła funkcje programu Access 2003 i programu Access 2002, które umożliwiają użytkownikom zmienianie danych w połączonych tabelach wskazujących zakres w skoroszycie programu Excel. Jednak po wprowadzeniu zmian bezpośrednio w skoroszycie programu Excel zmiany zostaną wyświetlone w tabeli połączonej w programie Access.
Opinia
https://aka.ms/ContentUserFeedback.
Już wkrótce: w ciągu 2024 r. będziemy stopniowo usuwać problemy z usługą GitHub jako mechanizm opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla