No Microsoft Office Access 2007, no Microsoft Office Access 2003 ou no Microsoft Access 2002, não é possível alterar, adicionar ou excluir dados das tabelas vinculadas a uma pasta de trabalho do Microsoft Excel.
Além disso, você pode perceber esse comportamento quando qualquer uma das seguintes condições for verdadeira:
- Você criou uma consulta para recuperar dados de tabelas vinculadas a uma pasta de trabalho do Excel.
- Você criou um formulário que acessa dados de tabelas vinculadas a uma pasta de trabalho do Excel.
- Você usa DAO ou ADO para atualizar programaticamente tabelas vinculadas a uma pasta de trabalho do Excel.
Você recebe a seguinte mensagem ao realizar uma consulta para atualizar registros em uma pasta de trabalho do Excel vinculada:
A operação deve usar uma consulta atualizável
Você recebe a seguinte mensagem quando usa o DAO para atualizar programaticamente tabelas vinculadas a uma pasta de trabalho do Excel:
Erro de tempo de execução 3027 Não é possível atualizar. Banco de dados ou objeto é do tipo somente leitura.
Quando você tenta atualizar os dados vinculados no ADO, a mensagem é a mesma, mas o número do erro pode ser semelhante ao seguinte:
Ao executar uma consulta para inserir registros em uma pasta de trabalho do Excel, a seguinte mensagem de erro é exibida se a pasta de trabalho do Excel não for vinculada a um banco de dados do Access:
A operação deve usar uma consulta atualizável
Esse comportamento esperado ocorre quando uma das seguintes condições for verdadeira:
- Você está usando o Office Access 2007.
- Você instalou o Microsoft Office 2003 Service Pack 2 (SP2) ou quaisquer atualizações do Access 2003 lançadas após o Office 2003 SP2.
Para obter informações adicionais sobre o Microsoft Office 2003 Service Pack 2, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:
887616
(http://support.microsoft.com/kb/887616/
)
Descrição do Office 2003 Service Pack 2
- Você instalou a atualização para o Access 2002 (KB904018) com data de 18 de outubro de 2005.
Para obter informações adicionais sobre a atualização para o Access 2002 (KB904018), clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:
904018
(http://support.microsoft.com/kb/904018/
)
Descrição da atualização para o Access 2002: 18.10.05
- Você instalou um aplicativo de tempo de execução do Access que inclui o Microsoft Office 2003 Service Pack 2 (SP2), quaisquer atualizações do Access 2003 lançadas após o Office 2003 SP2, ou a atualização para Access 2002 (KB904018) com data de 18 de outubro de 2005 ou mais recente.
Para obter informações adicionais sobre como incluir os arquivos de atualização do Office com um aplicativo de tempo de execução do Access, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft (a página pode estar em inglês):
916176
(http://support.microsoft.com/kb/916176/
)
O assistente usa os arquivos de tempo de execução incluídos com a versão de lançamento do Access quando você cria um pacote de instalação para um aplicativo no Access 2003 ou no Access 2002
Como solução alternativa para esse comportamento esperado, use um dos seguintes métodos.
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 você tiver concluído as alterações, salve-as 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 você tiver concluído as alterações, exporte os dados para um arquivo .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 Note Nesse exemplo de código, substitua os seguintes espaços reservados:
- <CaminhodoAccess>
- <CaminhodoExcel>
- <MinhaConsulta>
<MinhaConsulta> representa a consulta executada nas tabelas no banco de dados do Access. O resultado da consulta é exportado para a pasta de trabalho do Excel. - <Planilhas>
<Planilhas> representa a planilha do Excel para a qual você deseja exportar o resultado.
Para executar esse exemplo de código, pressione CTRL+G para abrir a janela
Imediato, digite
WorkArounds e pressione ENTER.
Devido a problemas legais, a Microsoft desabilitou a funcionalidade no Access 2003 e no Access 2002 que permite que os usuários alterem dados em tabelas vinculadas que apontem para um intervalo em uma pasta de trabalho do Excel. No entanto, quando você faz as alterações diretamente na pasta de trabalho do Excel, as alterações aparecem na tabela vinculada no Access.