No Microsoft Office Access 2007, Microsoft Office Access 2003 ou Microsoft Access 2002, não é possível alterar, adicionar nem eliminar dados em tabelas que estão ligadas a um livro do Microsoft Excel.
Além disso, poderá verificar este comportamento quando se verificar uma das seguintes condições:
- Cria uma consulta para obter dados de tabelas que estão ligadas a um livro do Excel.
- Cria um formulário que acede a dados de tabelas que estão ligadas a um livro do Excel.
- Utiliza DAO ou ADO para actualizar programaticamente tabelas que estão ligadas a um livro do Excel.
Recebe a seguinte mensagem quando efectua uma consulta para actualizar registos num livro do Excel ligado:
A operação deve utilizar uma consulta actualizável
Recebe a seguinte mensagem quando utiliza DAO para actualizar programaticamente tabelas que estão ligadas a um livro do Excel:
Runtime Error '3027' Não é possível actualizar. Base de dados ou objecto só de leitura.
Quando tenta actualizar os dados ligados no ADO, a mensagem é a mesma, mas o número do erro pode ser semelhante ao seguinte:
Quando executa uma consulta para inserir registos num livro do Excel, recebe a seguinte mensagem de erro mesmo que o livro do Excel não esteja ligado a uma base de dados do Access:
A operação deve utilizar uma consulta actualizável
Este comportamento previsto ocorre quando se verifica uma das seguintes condições:
- Se estiver a utilizar o Office Access 2007.
- Instalou o Microsoft Office 2003 Service Pack 2 (SP2), um Service Pack posterior ou quaisquer actualizações do Access 2003 disponibilizadas após o Office 2003 SP2.
Para obter mais informações sobre o Microsoft Office 2003 Service Pack 2, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
887616
(http://support.microsoft.com/kb/887616/
)
Descrição do Office 2003 Service Pack 2
- Instalou a actualização do Access 2002 (KB904018) datada de 18 de Outubro de 2005.
Para obter mais informações sobre a actualização do Access 2002 (KB904018), clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
904018
(http://support.microsoft.com/kb/904018/
)
Descrição da actualização do Access 2002: 18 de Outubro de 2005
- Instalou uma aplicação de tempo de execução do Access que inclui o Microsoft Office 2003 Service Pack 2 (SP2) ou um Service Pack posterior, actualizações do Access 2003 disponibilizadas depois do Office 2003 SP2 ou a actualização do Access 2002 (KB904018), de 18 de Outubro de 2005, ou posteriores.
Para obter mais informações sobre como incluir ficheiros de actualização do Office numa aplicação de tempo de execução do Access, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
916176
(http://support.microsoft.com/kb/916176/
)
O assistente utiliza os ficheiros run-time incluídos com a versão do Access quando cria um pacote de instalação para uma aplicação no Access 2003 ou Access 2002
Para contornar este comportamento previsto, utilize um dos seguintes métodos.
Método 1: Utilizar o Microsoft Excel
Abra o livro do Excel ligado no Microsoft Excel e efectue as alterações no livro. Quando tiver terminado as alterações, guarde as alterações e feche o livro.
Método 2: Utilizar o Office Access 2007, Access 2003 ou Access 2002
Importe o livro do Excel ligado para o Access e efectue as alterações nos dados. Quando tiver terminado as alterações, exporte os dados como um ficheiro .xls do Excel.
Para exportar a tabela do Access para o Excel, execute o seguinte código no 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 Neste exemplo de código, substitua os seguintes marcadores de posição:
- <AccessPath>
- <ExcelPath>
- <MyQuery>
<MyQuery> é um marcador de posição para a consulta executada contra as tabelas da base de dados do Access. O resultado da consulta é exportado para o livro do Excel. - <WorkSheets>
<WorkSheets> é um marcador de posição para a folha do Excel para a qual pretende exportar o resultado.
Para executar este exemplo de código, prima CTRL+R para abrir a janela
Immediate, escreva
WorkArounds e prima ENTER.
Por questões legais, a Microsoft desactivou a funcionalidade do Access 2003 e do Access 2002 que permitia que os utilizadores alterassem os dados em tabelas ligadas que apontassem para um conjunto num livro do Excel. No entanto, quando efectua alterações directamente no livro do Excel, as alterações são apresentadas na tabela ligada no Access.