Você não pode alterar, adicionar ou excluir dados em tabelas vinculadas a uma pasta de trabalho do Excel no Access
Número de KB original: 904953
Sintomas
No Microsoft Office Access 2007 ou no Microsoft Office Access 2003 ou no Microsoft Access 2002, você não pode alterar, adicionar ou excluir dados em tabelas vinculadas a uma pasta de trabalho do Microsoft Excel.
Além disso, você pode experimentar esse comportamento quando qualquer uma das seguintes condições for verdadeira:
- Você cria uma consulta para recuperar dados de tabelas vinculadas a uma pasta de trabalho do Excel.
- Você cria um formulário que acessa dados de tabelas vinculadas a uma pasta de trabalho do Excel.
- Você usa DAO ou ADO para atualizar tabelas programaticamente vinculadas a uma pasta de trabalho do Excel.
Você recebe a seguinte mensagem ao executar uma consulta para atualizar registros em uma pasta de trabalho vinculada do Excel:
A operação deve usar uma consulta atualizável
Você recebe a seguinte mensagem ao usar o DAO para atualizar programaticamente tabelas vinculadas a uma pasta de trabalho do Excel:
Erro de runtime '3027' Não é possível atualizar. O banco de dados ou o objeto é somente leitura.
Quando você tenta atualizar os dados vinculados no ADO, a mensagem é a mesma, mas o número de erro pode ser semelhante ao seguinte:
-2147217911 (80040e09)
Ao executar uma consulta para inserir registros em uma pasta de trabalho do Excel, você receberá a seguinte mensagem de erro mesmo que a pasta de trabalho do Excel não esteja vinculada a um banco de dados do Access:
A operação deve usar uma consulta atualizável
Motivo
Esse comportamento esperado ocorre quando uma das seguintes condições é verdadeira:
- Você está usando o Office Access 2007.
- Você instalou o Microsoft Office 2003 Service Pack 2 (SP2) ou um service pack posterior ou quaisquer atualizações do Access 2003 que foram lançadas após o Office 2003 SP2.
- Você instalou a atualização do Access 2002 (KB904018) datada de 18 de outubro de 2005.
- Você instalou um aplicativo de runtime do Access que inclui o Microsoft Office 2003 Service Pack 2 (SP2) ou um service pack posterior, todas as atualizações do Access 2003 lançadas após o Office 2003 SP2 ou a atualização do Access 2002 (KB904018) datada de 18 de outubro de 2005 ou posterior.
Solução alternativa
Para contornar esse comportamento esperado, use um dos métodos a seguir.
Método 1: usar o Microsoft Excel
Abra a pasta de trabalho vinculada do Excel no Microsoft Excel e faça suas alterações na pasta de trabalho. Quando concluir as alterações, salve as alterações e feche a pasta de trabalho.
Método 2: usar o Office Access 2007, o Access 2003 ou o Access 2002
Importe a pasta de trabalho vinculada do Excel para o Access e faça suas alterações nos dados. Quando concluir as alterações, exporte os dados como um arquivo de .xls do Excel.
Para exportar a tabela do Access para Excel, execute o código a seguir 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
Observação
Neste exemplo de código, substitua os seguintes espaços reservados:
<AccessPath>
<ExcelPath>
<MyQuery>
<MyQuery> é espaço reservado para a consulta que você executa em relação às tabelas no banco de dados access. O resultado da consulta é exportado para a pasta de trabalho do Excel.
<Planilhas>
<Planilhas> de trabalho é um espaço reservado para a planilha no Excel para a qual você deseja exportar o resultado. Para executar este exemplo de código, pressione CTRL+G para abrir a janela Imediato , digite Soluções Alternativas e pressione ENTER.
Informações adicionais
Devido a problemas legais, a Microsoft desabilitou a funcionalidade no Access 2003 e no Access 2002 que permitem que os usuários alterem os dados em tabelas vinculadas que apontam para um intervalo em uma pasta de trabalho do Excel. No entanto, quando você faz alterações diretamente na pasta de trabalho do Excel, as alterações aparecem na tabela vinculada no Access.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de