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

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 904953 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Symptomy

W programie Microsoft Office Access 2007, 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.

Problem ten może też występować wtedy, gdy jest spełniony dowolny z następujących warunków:
  • Utworzono kwerendę w celu pobrania danych z tabel, które są połączone ze skoroszytem programu Excel.
  • Utworzono formularz uzyskujący dostęp do danych w tabelach, które są połączone ze skoroszytem programu Excel.
  • Używany jest obiekt DAO lub ADO dla potrzeb programowego aktualizowania tabel połączonych ze skoroszytem programu Excel.
Podczas wykonywania kwerendy aktualizującej rekordy w tabelach połączonych ze skoroszytem programu Excel jest wyświetlany następujący komunikat:
Operacja musi używać kwerendy umożliwiającej aktualizację
Gdy obiekt DAO jest używany dla potrzeb programowego aktualizowania tabel połączonych ze skoroszytem programu Excel, jest wyświetlany następujący komunikat:
Błąd wykonania 3027: Nie można zaktualizować. Baza danych lub obiekt są dostępne tylko do odczytu.
Podczas próby zaktualizowania połączonych danych w obiekcie ADO komunikat jest taki sam, ale numer błędu może być podobny do następującego:
-2147217911 (80040e09)
W przypadku uruchomienia kwerendy w celu wstawienia rekordów do skoroszytu programu Excel pojawia się 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 umożliwiającej aktualizację

Przyczyna

Ten problem może wystąpić wtedy, gdy jest spełniony jeden z następujących warunków:
  • Jest używany program Office Access 2007.
  • Został zainstalowany dodatek Service Pack 2 (SP2) dla pakietu Microsoft Office 2003 lub dowolne aktualizacje programu Access 2003, które zostały wydane po wydaniu dodatku SP2 dla pakietu Office 2003.

    Aby uzyskać więcej informacji na temat dodatku Service Pack 2 dla pakietu Microsoft Office 2003, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
    887616 Opis dodatku Service Pack 2 dla pakietu Office 2003
  • Została zainstalowana aktualizacja programu Access 2002 (KB904018) z 18 października 2005.

    Aby uzyskać więcej informacji na temat aktualizacji programu Access 2002 (KB904018), kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
    904018 Description of the update for Access 2002: October 18, 2005
  • Zainstalowano aplikację Access Runtime obejmującą dodatek Service Pack 2 (SP2) dla pakietu Microsoft Office 2003 (Office 2003 SP2), dowolne aktualizacje programu Access 2003 wydane po dodatku Office 2003 SP2 albo aktualizację programu Access 2002 (KB904018) z dnia 18 października 2005 roku lub nowszą.
    Aby uzyskać więcej informacji dotyczących sposobu automatycznego uwzględnienia plików aktualizacji pakietu Office przez aplikację Access Runtime, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
    916176 The wizard uses the run-time files that are included with the release version of Access when you create an installation package for an application in Access 2003 or in Access 2002

Obejście problemu

W celu obejścia tego spodziewanego problemu należy użyć jednej z poniższych 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. Ukończywszy wprowadzanie zmian, zapisz zmiany i 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. Ukończywszy wprowadzanie 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=<ŚcieżkaDoProgramuAccess>"
    'Uwaga: W programie Office Access 2007 użyj następującej linii kodu:
    'Db.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=<ŚcieżkaDoProgramuAccess>"
    SQL = "<MojaKwerenda>"
    CopyRecordSetToXL SQL, Db
    Db.Close
    MsgBox "Program Access pomyślnie wyeksportował dane do pliku programu Excel.", vbInformation, "Eksport powiódł się."
    Exit Sub
Leave:
        MsgBox Err.Description, vbCritical, "Błąd"
        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 = "<ŚcieżkaDoProgramuExcel>"
    'Utworzenie wystąpienia nowej sesji za pomocą obiektu COM Excel.exe.
    Set xlApp = New Excel.Application
    Set xlwbBook = xlApp.Workbooks.Open(stFile)
    Set xlwsSheet = xlwbBook.Worksheets("<Arkusze>")
    xlwsSheet.Activate
    'Pobranie pierwszej komórki w celu wyprowadzenia danych.
    xlwsSheet.Cells.SpecialCells(xlCellTypeLastCell).Select
    y = xlApp.ActiveCell.Column - 1
    xlApp.ActiveCell.Offset(1, -y).Select
    x = xlwsSheet.Application.ActiveCell.Cells.Address
    'Otwarcie zestawu rekordów opartego na kwerendzie SQL i zapisanie danych w arkuszu programu Excel.
    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 kodzie przykładowym należy odpowiednio zastąpić następujące symbole zastępcze:
  • <ŚcieżkaDoProgramuAccess>
  • <ŚcieżkaDoProgramuExcel>
  • <MojaKwerenda>
    <MojaKwerenda> to symbol zastępczy kwerendy uruchamianej na podstawie tabel w bazie danych programu Access. Wynik tej kwerendy jest eksportowany do skoroszytu programu Excel.
  • <Arkusze>
    <Arkusze> to symbol zastępczy arkusza programu Excel, do którego ma zostać wyeksportowany wynik.
Aby uruchomić ten kod przykładowy, naciśnij klawisze CTRL+G w celu otwarcia okienka Bezpośrednie, wpisz WorkArounds, a następnie naciśnij klawisz ENTER.

Więcej informacji

Ze względów prawnych firma Microsoft wyłączyła w programach Access 2003 i Access 2002 funkcję, która umożliwia 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 będą widoczne w połączonej tabeli w programie Access.

Właściwości

Numer ID artykułu: 904953 - Ostatnia weryfikacja: 30 marca 2007 - Weryfikacja: 6.1
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Access 2002 Runtime
  • Microsoft Office Access 2003 Runtime
Słowa kluczowe: 
kbexpertiseadvanced kbdatabase kbtshoot kbprb KB904953

Przekaż opinię

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com