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

Not

Office 365 ProPlus, Microsoft 365 Kurumsal Uygulamaları olarak yeniden adlandırılıyor. Bu değişiklik hakkında daha fazla bilgi için, bu blog yazısını okuyun.

Orijinal KB numarası:   904953

Belirtiler

Microsoft Office Access 2007'de veya Microsoft Office Access 2003'te veya Microsoft Access 2002'de, 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ışı yaşayabilirsiniz:

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

Bağlı bir Excel çalışma kitabında 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ı programlı olarak güncelleştirmek için DAO'yu kullandığınızda aşağıdaki iletiyi alırsınız:

Çalışma Zamanı Hatası '3027' güncelleştirilemez. Veritabanı veya nesne salt okunur.

ADO'da bağlı verileri güncelleştirmeye çalıştığınızda, ileti aynıdır, ancak hata numarası aşağıdakilere benzer olabilir:

-2147217911 (80040e09)

Kayıtları Bir Excel çalışma kitabına 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'yi kullanıyorsunuz.
  • Microsoft Office 2003 Hizmet Paketi 2 (SP2) veya daha sonraki bir hizmet paketini veya Office 2003 SP2'den sonra yayımlanan Access 2003 güncelleştirmelerini yükledin.
  • Access 2002 (KB904018) güncelleştirmesini 18 Ekim 2005 tarihli yüklemiş siniz.
  • Microsoft Office 2003 Hizmet Paketi 2 (SP2) veya daha sonraki bir hizmet paketini, Office 2003 SP2'den sonra yayımlanan Access 2003 güncelleştirmelerini veya 18 Ekim 2005 veya daha sonra tarihli Access 2002 (KB904018) güncelleştirmesini içeren bir Access çalışma zamanı uygulaması yüklemişsiniz.

Geçici Çözüm

Bu beklenen davranışı n için aşağıdaki yöntemlerden birini kullanın.

Yöntem 1: Microsoft Excel'i kullanma

Microsoft Excel'de bağlantılı Excel çalışma kitabını açın ve ardından çalışma kitabında değişiklik 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'yi kullanma

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

Tabloyu Excel'e Erişim'den dışa 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 tablolara karşı çalıştırdığınız sorgunun yer tutucusudur. Sorgunun sonucu Excel çalışma kitabına dışa aktarılır.

  • <Çalışma Sayfaları>

    <Çalışma Sayfaları>, sonucu dışa aktarmak istediğiniz Excel'deki çalışma sayfasının yer tutucusudur. Bu kod örneğini çalıştırmak için Hemen pencereyi açmak için CTRL+G tuşuna basın, Geçici İşlemler yazın ve enter tuşuna basın.

Daha Fazla Bilgi

Yasal sorunlar nedeniyle Microsoft, Access 2003 ve Access 2002'de kullanıcıların bir Excel çalışma kitabındaki bir aralığı işaret eden bağlantılı tablolardaki verileri değiştirmesine olanak sağlayan işlevselliği devre dışı bıraktı. 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.