Excel-työkirjaan linkitettyjen taulukoiden tietoja ei voi muuttaa, lisätä tai poistaa Accessissa

Alkuperäinen KT-numero: 904953

Oireet

Microsoft Office Access 2007:ssä tai Microsoft Office Access 2003:ssa tai Microsoft Access 2002:ssa et voi muuttaa, lisätä tai poistaa tietoja taulukoista, jotka on linkitetty Microsoft Excel -työkirjaan.

Lisäksi saatat kohdata tämän toiminnan, kun jokin seuraavista ehdoista toteutuu:

  • Luot kyselyn tietojen noutamiseksi taulukoista, jotka on linkitetty Excel-työkirjaan.
  • Luot lomakkeen, joka käyttää Excel-työkirjaan linkitettyjen taulukoiden tietoja.
  • DAO:n tai ADO:n avulla voit päivittää Excel-työkirjaan linkitettyjä taulukoita ohjelmallisesti.

Näyttöön tulee seuraava sanoma, kun suoritat kyselyn linkitetyn Excel-työkirjan tietueiden päivittämiseksi:

Toiminnon on käytettävä päivitettävää kyselyä

Näyttöön tulee seuraava sanoma, kun käytät DAOa Excel-työkirjaan linkitettyjen taulukoiden ohjelmalliseen päivittämiseen:

Suorituksenaikaista virhettä '3027' ei voi päivittää. Tietokanta tai objekti on vain luku -tilassa.

Kun yrität päivittää linkitettyjä tietoja ADO:ssa, viesti on sama, mutta virhenumero saattaa olla seuraavanlainen:

-2147217911 (80040e09)

Kun suoritat kyselyn tietueiden lisäämiseksi Excel-työkirjaan, näyttöön tulee seuraava virhesanoma, vaikka Excel-työkirjaa ei olisi linkitetty Access-tietokantaan:

Toiminnon on käytettävä päivitettävää kyselyä

Syy

Tämä odotettu toiminta ilmenee, kun jompikumpi seuraavista ehdoista toteutuu:

  • Käytössäsi on Office Access 2007.
  • Olet asentanut Microsoft Office 2003 Service Pack 2:n (SP2) tai uudemman Service Packin tai access 2003 -päivitykset, jotka on julkaistu Office 2003 SP2:n jälkeen.
  • Olet asentanut Access 2002:n (KB904018) päivityksen, joka on päivätty 18. lokakuuta 2005.
  • Olet asentanut Accessin suorituksenaikaisen sovelluksen, joka sisältää Microsoft Office 2003 Service Pack 2:n (SP2) tai uudemman Service Packin, Kaikki Office 2003 SP2:n jälkeen julkaistut Access 2003 -päivitykset tai Access 2002:n (KB904018) päivityksen, joka on päivätty 18. lokakuuta 2005 tai uudemman version jälkeen.

Vaihtoehtoinen menetelmä

Voit kiertää tämän odotetun toiminnan käyttämällä jotakin seuraavista menetelmistä.

Tapa 1: Microsoft Excelin käyttäminen

Avaa linkitetty Excel-työkirja Microsoft Excelissä ja tee sitten muutokset työkirjaan. Kun olet tehnyt muutokset, tallenna muutokset ja sulje työkirja.

Tapa 2: Office Access 2007:n, Access 2003:n tai Access 2002:n käyttäminen

Tuo linkitetty Excel-työkirja Accessiin ja tee sitten muutokset tietoihin. Kun olet tehnyt muutokset, vie tiedot Excel-.xls-tiedostona.

Jos haluat viedä taulukon Accessista Exceliin, suorita seuraava koodi Accessissa.

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

Huomautus

Korvaa tässä koodiesimerkissä seuraavat paikkamerkit:

  • <AccessPath>

  • <ExcelPath>

  • <Omakysely>

    <MyQuery> on sen kyselyn paikkamerkki, jonka suoritat Access-tietokannan taulukoille. Kyselyn tulos viedään Excel-työkirjaan.

  • <Laskentataulukot>

    <Työlomakkeet> on sen Excelin laskentataulukon paikkamerkki, johon haluat viedä tuloksen. Jos haluat suorittaa tämän koodiesimerkin, avaa Välitön-ikkuna painamalla CTRL+G, kirjoita Vaihtoehtoinen menetelmä ja paina ENTER.

Lisätietoja

Juridisten ongelmien vuoksi Microsoft on poistanut käytöstä Access 2003:n ja Access 2002:n toiminnot, joiden avulla käyttäjät voivat muuttaa linkitettyjen taulukoiden tietoja, jotka osoittavat Excel-työkirjan tiettyyn alueeseen. Kun teet muutoksia suoraan Excel-työkirjaan, muutokset näkyvät kuitenkin linkitetyssä taulukossa Accessissa.