Access'te excel çalışma kitabına bağlı tablolardaki verileri değiştiremez, ekleyemez veya silemezsiniz

Özgün KB numarası: 904953

Belirtiler

Microsoft Office Access 2007 veya Microsoft Office Access 2003 veya Microsoft Access 2002'de, Bir Microsoft Excel çalışma kitabına bağlı tablolardaki verileri değiştiremez, ekleyemez veya silemezsiniz.

Ayrıca, aşağıdaki koşullardan herhangi biri doğru olduğunda bu davranışla karşılaşabilirsiniz:

  • Excel çalışma kitabına bağlı tablolardan veri almak için bir sorgu oluşturursunuz.
  • Excel çalışma kitabına bağlı tablolardan verilere erişen bir form oluşturursunuz.
  • Excel çalışma kitabına bağlı tabloları program aracılığıyla güncelleştirmek için DAO veya ADO kullanırsınız.

Bağlantılı bir Excel çalışma kitabındaki kayıtları güncelleştirmek için bir sorgu gerçekleştirdiğinizde aşağıdaki iletiyi alırsınız:

İşlem güncelleştirilebilir bir sorgu kullanmalıdır

Bir Excel çalışma kitabına bağlı tabloları program aracılığıyla güncelleştirmek için DAO kullandığınızda aşağıdaki iletiyi alırsınız:

Çalışma Zamanı Hatası '3027' Güncelleştirilemiyor. Veritabanı veya nesne salt okunurdur.

ADO'da bağlı verileri güncelleştirmeyi denediğinizde ileti aynıdır, ancak hata numarası aşağıdakine benzer olabilir:

-2147217911 (80040e09)

Excel çalışma kitabına kayıt eklemek için bir sorgu çalıştırdığınızda, Excel çalışma kitabı access veritabanına bağlı olmasa bile aşağıdaki hata iletisini alırsınız:

İşlem güncelleştirilebilir bir sorgu kullanmalıdır

Neden

Bu beklenen davranış, aşağıdaki koşullardan biri doğru olduğunda oluşur:

  • Office Access 2007 kullanıyorsunuz.
  • Microsoft Office 2003 Service Pack 2 (SP2) veya sonraki bir hizmet paketini ya da Office 2003 SP2'nin ardından yayımlanan access 2003 güncelleştirmelerini yüklediniz.
  • 18 Ekim 2005 tarihli Access 2002 (KB904018) güncelleştirmesini yüklediniz.
  • Microsoft Office 2003 Service Pack 2 (SP2) veya sonraki bir hizmet paketini, Office 2003 SP2 sonrasında yayımlanan Access 2003 güncelleştirmelerini veya 18 Ekim 2005 veya sonraki bir tarihli Access 2002 (KB904018) güncelleştirmesini içeren bir Access çalışma zamanı uygulaması yüklediniz.

Geçici Çözüm

Beklenen bu davranışı geçici olarak çözmek için aşağıdaki yöntemlerden birini kullanın.

Yöntem 1: Microsoft Excel'i kullanma

Bağlı Excel çalışma kitabını Microsoft Excel'de açın ve çalışma kitabında değişikliklerinizi yapın. Değişiklikleri tamamladığınızda, değişiklikleri kaydedin ve çalışma kitabını kapatın.

Yöntem 2: Office Access 2007, Access 2003 veya Access 2002 kullanma

Bağlantılı Excel çalışma kitabını Access'e aktarın ve sonra verilerde değişikliklerinizi yapın. Değişiklikleri tamamladığınızda, verileri Excel .xls dosyası olarak dışarı aktarın.

Tabloyu Access'ten Excel'e aktarmak için Access'te aşağıdaki kodu çalıştırın.

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

Not

Bu kod örneğinde aşağıdaki yer tutucuları değiştirin:

  • <AccessPath>

  • <ExcelPath>

  • <MyQuery>

    <MyQuery> , Access veritabanındaki tablolarda çalıştırdığınız sorgu için yer tutucudur. Sorgunun sonucu Excel çalışma kitabına aktarılır.

  • <Çalışma>

    <Çalışma Sayfaları> , Excel'de sonucu dışarı aktarmak istediğiniz çalışma sayfası için bir yer tutucudur. Bu kod örneğini çalıştırmak için CTRL+G tuşlarına basarak Anında penceresini açın, WorkArounds yazın ve ENTER tuşuna basın.

Ek Bilgi

Yasal sorunlar nedeniyle Microsoft, Access 2003 ve Access 2002'de kullanıcıların Excel çalışma kitabındaki bir aralığa işaret eden bağlantılı tablolardaki verileri değiştirmesine olanak sağlayan işlevselliği devre dışı bırakmıştır. Ancak, doğrudan Excel çalışma kitabında değişiklik yaptığınızda, değişiklikler Access'teki bağlı tabloda görünür.