Impossibile modificare, aggiungere o eliminare dati in tabelle collegate a una cartella di lavoro di Excel in Office Access 2007, in Office Access 2003 o in Access 2002

Traduzione articoli Traduzione articoli
Identificativo articolo: 904953 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

In Microsoft Office Access 2007, in Microsoft Office Access 2003 o in Microsoft Access 2002 risulta impossibile modificare, aggiungere o eliminare dati in tabelle collegate a una cartella di lavoro di Microsoft Excel.

È inoltre possibile che si verifichi questo problema in presenza di una delle seguenti condizioni:
  • Si crea una query per recuperare dati da tabelle collegate a una cartella di lavoro di Excel.
  • Si crea un modulo che accede a dati di tabelle collegate a una cartella di lavoro di Excel.
  • Si utilizza DAO o ADO per aggiornare a livello di programmazione tabelle collegate a una cartella di lavoro di Excel.
Quando si esegue una query per aggiornare i record di una cartella di lavoro di Excel collegata, viene visualizzato un messaggio di errore analogo al seguente:
Per l'operazione è necessaria una query aggiornabile
Quando si utilizza DAO per aggiornare al livello di programmazione tabelle collegate a una cartella di lavoro di Excel, viene visualizzato un messaggio di errore analogo al 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 codice 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 un messaggio di errore analogo al seguente anche se la cartella di lavoro non è collegata a un database di Access:
Per l'operazione è necessaria una query aggiornabile

Cause

Questo comportamento, del tutto intenzionale, si presenta quando si verifica una delle seguenti condizioni:
  • È in uso Office Access 2007.
  • Si è installato Microsoft Office 2003 Service Pack 2 (SP2) o un aggiornamento di Access 2003 rilasciato dopo Office 2003 SP2.

    Per ulteriori informazioni su Microsoft Office 2003 Service Pack 2, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    887616 Descrizione di Office 2003 Service Pack 2
  • Si è installato l'aggiornamento per Access 2002 (KB904018) datato 18 ottobre 2005.

    Per ulteriori informazioni sull'aggiornamento per Access 2002 (KB904018), fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    904018 Descrizione dell'aggiornamento per Access 2002 del 18 ottobre 2005
  • È stata installata un'applicazione Access Runtime che include Microsoft Office 2003 Service Pack 2 (SP2), tutti gli aggiornamenti di Access 2003 rilasciati dopo Office 2003 SP2 oppure l'aggiornamento di Access 2002 (KB904018) del 18 ottobre 2005 o successivo.
    Per ulteriori informazioni sull'inclusione dei file di aggiornamento di Office in un'applicazione Access Runtime, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
    916176 Quando si crea un pacchetto di installazione per un'applicazione di Access 2003 o Access 2002, nella procedura guidata vengono utilizzati i file di runtime inclusi nella versione finale di Access

Workaround

Per ovviare a questo comportamento intenzionale, adottare uno dei seguenti metodi.

Metodo 1: Utilizzo di Microsoft Excel

Aprire in Microsoft Excel la cartella di lavoro di Excel collegata, quindi apportarvi le modifiche. Al termine, salvare le modifiche e chiudere la cartella di lavoro.

Metodo 2: Utilizzo di Office Access 2007, Access 2003 o Access 2002

Importare in Access la cartella di lavoro di Excel collegata, quindi apportare le modifiche ai dati. Al termine, esportare i dati come file xls di Excel.

Per esportare la tabella da Access in 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 codice di esempio, sostituire i seguenti segnaposto:
  • <AccessPath>
  • <ExcelPath>
  • <MyQuery>
    <MyQuery> è il segnaposto per la query che viene eseguita sulle tabelle del database di Access. Il risultato della query viene esportato nella cartella di lavoro di Excel.
  • <WorkSheets>
    <WorkSheets> è il segnaposto per il foglio di lavoro di Excel in cui si desidera esportare il risultato.
Per eseguire questo codice di esempio, premere CTRL+G per aprire la finestra Immediata, digitare WorkArounds, quindi premere INVIO.

Informazioni

Per problemi di natura legale, Microsoft ha disattivato la funzionalità di Access 2003 e Access 2002 che consente agli utenti di modificare i dati di tabelle collegate che fanno riferimento a un intervallo in una cartella di lavoro di Excel. Tuttavia, quando si apportano le modifiche direttamente nella cartella di lavoro di Excel, tali modifiche compaiono anche nella tabella collegata in Access.

Proprietà

Identificativo articolo: 904953 - Ultima modifica: mercoledì 21 marzo 2007 - Revisione: 6.1
Le informazioni in questo articolo si applicano a:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Access 2002 Runtime
  • Microsoft Office Access 2003 Runtime
Chiavi: 
kbexpertiseadvanced kbdatabase kbtshoot kbprb KB904953
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com