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.
Palaute
https://aka.ms/ContentUserFeedback.
Tulossa pian: Vuoden 2024 aikana poistamme asteittain GitHub Issuesin käytöstä sisällön palautemekanismina ja korvaamme sen uudella palautejärjestelmällä. Lisätietoja on täällä:Lähetä ja näytä palaute kohteelle