Nie można zmieniać, dodawać ani usuwać danych w tabelach połączonych ze skoroszytem programu Excel w programie Access

Uwaga

Nazwa usługi Office 365 ProPlus została zmieniona na Aplikacje usługi Microsoft 365 dla przedsiębiorstw. Aby uzyskać więcej informacji na temat tej zmiany, przeczytaj ten wpis w blogu.

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:

  • Tworzenie kwerendy w celu pobierania danych z tabel połączonych ze skoroszytem programu Excel.
  • Tworzenie formularza, który uzyskuje dostęp do danych z tabel połączonych ze skoroszytem programu Excel.
  • Dao lub ADO służy do programowej aktualizacji tabel połączonych ze skoroszytem programu Excel.

Podczas wykonywania kwerendy w celu zaktualizowania rekordów w połączonym skoroszycie programu Excel jest wyświetlany następujący komunikat:

Operacja musi używać kwerendy podlegającej aktualizacji

Podczas programowej aktualizacji tabel połączonych ze skoroszytem programu Excel jest wyświetlany następujący komunikat:

Nie można zaktualizować błędu środowiska uruchomieniowego "3027". Baza danych lub obiekt jest tylko do odczytu.

Podczas próby aktualizacji połączonych danych w ADO komunikat jest taki sam, ale numer błędu może być podobny do następującego:

-2147217911 (80040e09)

Po uruchomieniu kwerendy 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 podlegającej 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 dodatek Service Pack 2 (SP2) dla pakietu Microsoft Office 2003 lub dodatek Service Pack lub aktualizacje dodatku Access 2003 wydane po dodatku SP2 dla pakietu Office 2003.
  • Zainstalowano aktualizację programu Access 2002 (KB904018) z dnia 18 października 2005 r.
  • Zainstalowano aplikację środowiska wykonawczego programu Access zawierającą dodatek Service Pack 2 (SP2) dla pakietu Microsoft Office 2003 (SP2) lub dodatek Service Pack, wszelkie aktualizacje programu Access 2003 wydane po dodatku SP2 dla pakietu Office 2003 lub aktualizację programu Access 2002 (KB904018) z dnia 18 października 2005 r. lub nowszą.

Obejście problemu

Aby obejść to oczekiwane zachowanie, należy użyć jednej z następujących metod.

Metoda 1: Korzystanie z programu Microsoft Excel

Otwórz połączony skoroszyt programu Excel w programie Microsoft Excel, a następnie wykonuj zmiany w skoroszycie. Po zakończeniu zmian zapisz zmiany, a następnie zamknij skoroszyt.

Metoda 2: korzystanie z programu Office Access 2007, Access 2003 lub Access 2002

Zaimportuj połączony skoroszyt programu Excel do programu Access, a następnie wykonuj 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:

  • <> programu AccessPath

  • <> programu ExcelPath

  • <> MyQuery

    <MyQuery> jest symbolem zastępczym kwerendy uruchamianą względem tabel w bazie danych programu Access. Wynik kwerendy zostanie wyeksportowany do skoroszytu programu Excel.

  • <Arkusze>

    <Arkusze> jest symbolem zastępczym 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 obejścia, a następnie naciśnij klawisz ENTER.

Więcej informacji

Z powodu problemów prawnych firma Microsoft wyłączyła funkcje w programie Access 2003 i Access 2002, które umożliwiają użytkownikom zmianę danych w tabelach połączonych, które wskazują zakres w skoroszycie programu Excel. Jednak po wprowadzeniu zmian bezpośrednio w skoroszycie programu Excel zmiany są wyświetlane w tabeli połączonej w programie Access.