Identificativo articolo: 904953 - Ultima modifica: mercoledì 21 marzo 2007 - Revisione: 6.1
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
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
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
(http://support.microsoft.com/kb/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
(http://support.microsoft.com/kb/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
(http://support.microsoft.com/kb/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
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.
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.
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.