Não é possível alterar, adicionar nem eliminar dados nas tabelas que estão associadas a um livro do Excel no Office Access 2007, Office Access 2003 ou Access 2002

Traduções de Artigos Traduções de Artigos
Artigo: 904953 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

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:
-2147217911 (80040e09)
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

Causa

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 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 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 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

Como contornar

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.

Mais Informação

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.

Propriedades

Artigo: 904953 - Última revisão: 5 de dezembro de 2007 - Revisão: 7.4
A informação contida neste artigo aplica-se a:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2007 Runtime
  • Microsoft Office Access 2003
  • Microsoft Office Access 2003 Runtime
  • Microsoft Office Excel 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2002 Runtime
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
Palavras-chave: 
kbexpertiseadvanced kbdatabase kbtshoot kbprb KB904953

Submeter comentários

 

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