... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Manipular dados de uma planilha Excel usando o Recordset

Podemos usar o Recordset para manipular os dados de uma planilha.  Veja esta imagem:

Usando Access - Update plainilha Excel

Vamos acrescentar à lista mais um produto.  Acompanhe os comentários do código proposto:

Public Sub fncATualizarPlanilha()
Dim strTabela As String
Dim strSQL As String
Dim bdExcel As DAO.Database
Dim rs As DAO.Recordset
'Passa o local e nome do arquivo para a variável
strArquivo = CurrentProject.Path & "\ListaClientes.xls"
'Abre arquivo ListaClientes.xls
Set bdExcel = OpenDatabase(strArquivo,False,False,"Excel 12.0;HDR=Yes;IMEX=0;")
'Monta a consulta do Recordset
strSQL = "SELECT * FROM [Planilha1$]"
'Abre o Recordset da consulta
Set rs = bdExcel.OpenRecordset(strSQL)
'Adiciona novo produto à lista
rs.AddNew
    rs!id = 6
    rs!Produto = "Tesoura"
    rs![Valor Produto] = "18,70"
rs.Update
'fecha o Recordset
rs.Close
Set rs = Nothing
'Fecha o arquivo Excel
bdExcel.Close
Set bdExcel = Nothing
MsgBox "A planilha foi atualizada...", vbInformation, "Aviso"
End Sub

Observe o produto inserido à lista, após a execução do código:

Usando Access - Uso do Recordset em planilha Excel

 

Desafio:

Crie um planilha Excel com a lista de produtos apresentada aqui e altere o código acima para realizar a transferência dos dados dessa planilha para uma tabela no Access.

Bom estudo!


 

 


5 comentário(s)

Fabio Matos   27/03/2018 22:38:23

Grande mestre Avelino, preciso de uma ajuda absurdamente importante para o meu projeto e eu não consigo fazer de jeito nenhum. Já tentei muito.
Tem como, dentro deste código, copiar todos os registros da tabela Access para o Excel, em vez de apenas 1?
OBS:
Meu Office é o 2016 32bits e meu banco de Dados está com senha.

Avelino Sampaio   28/03/2018 00:31:51

Fábio,

experimente assim:

Public Sub fncATualizarPlanilha()
Dim strTabela As String
Dim strSQL As String
Dim bdExcel As DAO.Database
Dim rs As DAO.Recordset
Dim rsTbl As DAO.Recordset
strArquivo = CurrentProject.Path & "\ListaClientes.xls"
Set bdExcel = OpenDatabase(strArquivo, False, False, "Excel 12.0;HDR=Yes;IMEX=0;")
strSQL = "SELECT * FROM [Planilha1$]"
Set rs = bdExcel.OpenRecordset(strSQL)
Set rsTbl = CurrentDb.OpenRecordset("NomeDaTabela")
Do While Not rsTbl.EOF
rs.AddNew
rs!id = rsTbl!id
rs!produto = rsTbl!produto
rs![Valor Produto] = rsTbl!ValorProduto
rs.Update
Loop
rsTbl.Close
Set rsTbl = Nothing
rs.Close
Set rs = Nothing
bdExcel.Close
Set bdExcel = Nothing
MsgBox "A planilha foi atualizada...", vbInformation, "Aviso"
End Sub

Sucesso!

Fabio Matos   05/04/2018 11:56:02

Professor, o código está copiando sempre o primeiro registro da tabela do Access em um looping infinito.
O que eu faço?
No teste, estou utilizando desta forma:

Dim strTabela As String
Dim strSQL As String
Dim bdExcel As DAO.Database
Dim rs As DAO.Recordset
Dim rsTbl As DAO.Recordset
strArquivo = CurrentProject.Path & "\PlanilhaTeste.xlsm"
Set bdExcel = OpenDatabase(strArquivo, False, False, "Excel 12.0;HDR=Yes;IMEX=0;")
strSQL = "SELECT * FROM [Planilha1$]"
Set rs = bdExcel.OpenRecordset(strSQL)
Set rsTbl = CurrentDb.OpenRecordset("tbl_rot_Vendas")
Do While Not rsTbl.EOF
rs.AddNew
rs!Cod_venda = rsTbl!Cod_venda
rs!Cod_comissionista_G1 = rsTbl!Cod_comissionista_G1
rs!OptionOrcamento_venda = rsTbl!OptionOrcamento_venda
rs!Dt_Hr_venda = rsTbl!Dt_Hr_venda
rs!DtValidadeOrcamento = rsTbl!DtValidadeOrcamento
rs!Cod_cliente = rsTbl!Cod_cliente
rs!Grupo_vendas = rsTbl!Grupo_vendas
rs!AutorizadoPor = rsTbl!AutorizadoPor
rs!VendaFinalizada_vendas = rsTbl!VendaFinalizada_vendas
rs!OperadorCaixa_vendas = rsTbl!OperadorCaixa_vendas
rs!CNPJ_loja = rsTbl!CNPJ_loja
rs!Observacao = rsTbl!Observacao
rs!Cod_formaRetiradaEstoque = rsTbl!Cod_formaRetiradaEstoque
rs!ReferenciaCodVenda = rsTbl!ReferenciaCodVenda
rs!ultimaalteracao = rsTbl!ultimaalteracao
rs!USUARIOLOGADOVENDA = rsTbl!USUARIOLOGADOVENDA
rs!USUARIOLOGADOFECHAMENTO = rsTbl!USUARIOLOGADOFECHAMENTO
rs!Estornovenda = rsTbl!Estornovenda
rs!DtHrEstornoVenda = rsTbl!DtHrEstornoVenda
rs!UsuarioLogadoEstornovenda = rsTbl!UsuarioLogadoEstornovenda
rs.Update
Loop
rsTbl.Close
Set rsTbl = Nothing
rs.Close
Set rs = Nothing
bdExcel.Close
Set bdExcel = Nothing
MsgBox "A planilha foi atualizada...", vbInformation, "Aviso"

Avelino Sampaio   05/04/2018 12:21:32

Fabio,

acrescente o rs.moveNext

...
rs!DtHrEstornoVenda = rsTbl!DtHrEstornoVenda
rs!UsuarioLogadoEstornovenda = rsTbl!UsuarioLogadoEstornovenda
rs.Update
rs.moveNext
Loop
rsTbl.Close
...

Sucesso

Fabio Matos   05/04/2018 13:22:54

Mestre, consegui colocando o rsTbl.moveNext.
Muito obrigado pela ajuda. Tu é o cara.

O que seria da minha empresa sem este site aqui... Valeu mesmo.

...
rs!DtHrEstornoVenda = rsTbl!DtHrEstornoVenda
rs!UsuarioLogadoEstornovenda = rsTbl!UsuarioLogadoEstornovenda
rs.Update
rsTbl.moveNext
Loop
rsTbl.Close
...


Envie seu comentário: