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.