Página 1 de 1

Criar um Recordset no excel referenciando uma tabela da planilha

Enviado: 11 Mar 2022 às 21:46
por Alexan
Galera, é o seguinte!
Seguinte: o código abaixo, cria um recordset de uma planilha do Excel:
Sub Busca_eventos()
Dim Db As Database
Dim Ds As Recordset
Set Db = OpenDatabase(ThisWorkbook.Path & "\" & ThisWorkbook.Name, False, False, "Excel 8.0")
Set Ds = Db.OpenRecordset("Select * From [Planilha1$]")
Do Until Ds.EOF
MsgBox Ds![NomedoCampo]
Ds.MoveNext
Loop
End Sub

por exemplo:, na linha abaixo, estou referenciando a uma planilha:
Set Ds = Db.OpenRecordset("Select * From [Planilha1$]")
Porém eu tenho uma tabela que criei dentro desta planilha e nomeei como "Tb_Clientes".
Não sei como me referenciar a esta tabela criando um recordset.
Alguém pode me ajudar?

Re: Criar um Recordset no excel referenciando uma tabela da planilha

Enviado: 12 Mar 2022 às 11:03
por PHSabater
Rapaz... eu desconheço SQL para buscar em intervalo de células especificas, fiquei até curioso agora.
Quando a base da planilha está estruturada conforme um Banco de Dados iniciando na A1 até N colunas e N linhas funciona.

Para intervalos específicos eu trabalho com loop nativo do VBA.

Re: Criar um Recordset no excel referenciando uma tabela da planilha

Enviado: 12 Mar 2022 às 14:58
por Alexan
Pois é...deve ter um meio de fazer um sql, buscando pelo nome da própria tabela. Com isso, não precisamos referenciar intervalos.
Se existe uma forma de transformar uma planilha em um Recordset, deve existir a forma de dar um sql em uma das tabelas no excel. Só resta saber, como se referenciar à uma tabela.

Re: Criar um Recordset no excel referenciando uma tabela da planilha {RESOLVIDO]

Enviado: 13 Mar 2022 às 13:03
por Alexan
Resolvido! :)
Segue o código completo para quem se interessar:

Primeiro crie a função, conforme abaixo:
Function Captura_Range_Tabela(tbl As ListObject) As String
Captura_Range_Tabela = "[" & tbl.Parent.Name & "$" & tbl.Range.Address(False, False) & "] AS [" & tbl.Name & "]"
End Function

Agora a função que gera um recordset

Sub CriaRecordset ()
Dim Db As Database
Dim Ds As Recordset
Set Db = OpenDatabase(ThisWorkbook.Path & "\" & ThisWorkbook.Name, False, False, "Excel 8.0")
Set Ds = Db.OpenRecordset("SELECT * FROM " & Captura_Range_Tabela(ActiveSheet.ListObjects("Tabela1")))


Do Until Ds.EOF
MsgBox Ds!Nome
Ds.MoveNext
Loop
End Sub