Non è possibile modificare, aggiungere o eliminare dati in tabelle collegate a una cartella di lavoro di Excel in Access
Numero KB originale: 904953
Sintomi
In Microsoft Office Access 2007 o in Microsoft Office Access 2003 o in Microsoft Access 2002 non è possibile modificare, aggiungere o eliminare dati in tabelle collegate a una cartella di lavoro di Microsoft Excel.
Inoltre, questo comportamento può verificarsi quando si verifica una qualsiasi delle condizioni seguenti:
- Si compila una query per recuperare dati da tabelle collegate a una cartella di lavoro di Excel.
- Si compila un modulo che accede ai dati delle tabelle collegate a una cartella di lavoro di Excel.
- Si usa DAO o ADO per aggiornare le tabelle a livello di codice collegate a una cartella di lavoro di Excel.
Quando si esegue una query per aggiornare i record in una cartella di lavoro di Excel collegata, viene visualizzato il messaggio seguente:
L'operazione deve usare una query aggiornabile
Quando si usa DAO per aggiornare a livello di codice le tabelle collegate a una cartella di lavoro di Excel, viene visualizzato il messaggio seguente:
Errore di runtime '3027' Impossibile aggiornare. Database o oggetto di sola lettura.
Quando si tenta di aggiornare i dati collegati in ADO, il messaggio è lo stesso, ma il numero di errore potrebbe essere simile al seguente:
-2147217911 (80040e09)
Quando si esegue una query per inserire record in una cartella di lavoro di Excel, viene visualizzato il messaggio di errore seguente anche se la cartella di lavoro di Excel non è collegata a un database di Access:
L'operazione deve usare una query aggiornabile
Causa
Questo comportamento previsto si verifica quando si verifica una delle condizioni seguenti:
- Si usa Office Access 2007.
- È stato installato Microsoft Office 2003 Service Pack 2 (SP2) o un Service Pack successivo o qualsiasi aggiornamento di Access 2003 rilasciato dopo Office 2003 SP2.
- È stato installato l'aggiornamento per Access 2002 (KB904018) datato 18 ottobre 2005.
- È stata installata un'applicazione di runtime di Access che include Microsoft Office 2003 Service Pack 2 (SP2) o un Service Pack successivo, qualsiasi aggiornamento di Access 2003 rilasciato dopo Office 2003 SP2 o l'aggiornamento per Access 2002 (KB904018) datato 18 ottobre 2005 o versioni successive.
Soluzione alternativa
Per risolvere questo comportamento previsto, usare uno dei metodi seguenti.
Metodo 1: Usare Microsoft Excel
Aprire la cartella di lavoro di Excel collegata in Microsoft Excel e quindi apportare le modifiche apportate alla cartella di lavoro. Dopo aver completato le modifiche, salvare le modifiche e quindi chiudere la cartella di lavoro.
Metodo 2: Usare Office Access 2007, Access 2003 o Access 2002
Importare la cartella di lavoro di Excel collegata in Access e quindi apportare le modifiche ai dati. Dopo aver completato le modifiche, esportare i dati come file di .xls di Excel.
Per esportare la tabella da Access a Excel, eseguire il codice seguente in 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=<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
Nota
In questo esempio di codice sostituire i segnaposto seguenti:
<AccessPath>
<ExcelPath>
<MyQuery>
<MyQuery> è segnaposto per la query eseguita sulle tabelle nel database di Access. Il risultato della query viene esportato nella cartella di lavoro di Excel.
<Fogli>
<WorkSheets> è un segnaposto per il foglio di lavoro in Excel in cui si desidera esportare il risultato. Per eseguire questo esempio di codice, premere CTRL+G per aprire la finestra Immediata , digitare Soluzioni alternative e quindi premere INVIO.
Ulteriori informazioni
A causa di problemi legali, Microsoft ha disabilitato la funzionalità in Access 2003 e in Access 2002 che consente agli utenti di modificare i dati nelle tabelle collegate che puntano a un intervallo in una cartella di lavoro di Excel. Tuttavia, quando si apportano modifiche direttamente nella cartella di lavoro di Excel, le modifiche vengono visualizzate nella tabella collegata in Access.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per