Boa noite.
Estou criando um projeto formado por vários bancos de dados separados. Um destes bancos (arquivo accdb) contém um conjunto de funções e classes (VBA) que são usadas por outros bancos. Ou seja, este banco funciona como uma biblioteca de código que é reutilizado por outros projetos, bastando eu referenciar ela em Ferramentas -> Referências. Vou me referir a este arquivo como [Biblioteca].
Além do código VBA, também tenho definido formulários e tabelas neste banco. Tenho uma função que abre um destes formulários, que está ligado a uma das tabelas deste banco. Quando eu chamo esta função em outro banco (arquivo diferente), ele abre o formulário e tudo funciona como deveria, ou seja, ele se comporta como se o formulário e as tabelas estivessem no mesmo arquivo que chamou a função.
O problema que encontrei é o seguinte: não estou conseguindo encontrar um jeito de acessar as tabelas a partir da chamada das funções que estou exportando a partir da [Biblioteca]. Se eu escrevo um código como o a seguir
dim rs as DAO.Recordset
set rs = CurrentDb.OpenRecordset("tblMinhaTabela", dbOpenDynaset)
ocorre um erro dizendo que não existe a tabela com o nome "tblMinhaTabela", mesmo que esta tabela exista no banco [Biblioteca]. Não sei como fazer referência a esta tabela a partir de código VBA.
Resumindo:
[Biblioteca]
Tabelas:
tblMinhaTabela
Projeto VBA:
public function NumeroRegistros as Long
dim rs as DAO.Recordset
set rs = CurrentDb.OpenRecordset("tblMinhaTabela")
NumeroRegistros = rs.RecordCount
rs.Close
end function
[Outro banco de dados (arquivo diferente)]
Referências:
[Biblioteca]
Projeto VBA:
public sub ExibirNumeroRegistros
msgbox NumeroRegistros ' Vai ocorrer um erro, pois a tabela "tblMinhaTabela" não existe neste banco de dados.
end sub
A referência a CurrentDb vai ser ao Outro banco e não a [Biblioteca].
O estranho é que um formulário dentro de [Biblioteca] consegue achar a tabela, se estiver ligado a ela. Então, se eu abrí-lo por uma chamada de uma função em [Biblioteca], tudo ocorre bem.
Desde já agradeço se alguém puder me ajudar.
Estou criando um projeto formado por vários bancos de dados separados. Um destes bancos (arquivo accdb) contém um conjunto de funções e classes (VBA) que são usadas por outros bancos. Ou seja, este banco funciona como uma biblioteca de código que é reutilizado por outros projetos, bastando eu referenciar ela em Ferramentas -> Referências. Vou me referir a este arquivo como [Biblioteca].
Além do código VBA, também tenho definido formulários e tabelas neste banco. Tenho uma função que abre um destes formulários, que está ligado a uma das tabelas deste banco. Quando eu chamo esta função em outro banco (arquivo diferente), ele abre o formulário e tudo funciona como deveria, ou seja, ele se comporta como se o formulário e as tabelas estivessem no mesmo arquivo que chamou a função.
O problema que encontrei é o seguinte: não estou conseguindo encontrar um jeito de acessar as tabelas a partir da chamada das funções que estou exportando a partir da [Biblioteca]. Se eu escrevo um código como o a seguir
dim rs as DAO.Recordset
set rs = CurrentDb.OpenRecordset("tblMinhaTabela", dbOpenDynaset)
ocorre um erro dizendo que não existe a tabela com o nome "tblMinhaTabela", mesmo que esta tabela exista no banco [Biblioteca]. Não sei como fazer referência a esta tabela a partir de código VBA.
Resumindo:
[Biblioteca]
Tabelas:
tblMinhaTabela
Projeto VBA:
public function NumeroRegistros as Long
dim rs as DAO.Recordset
set rs = CurrentDb.OpenRecordset("tblMinhaTabela")
NumeroRegistros = rs.RecordCount
rs.Close
end function
[Outro banco de dados (arquivo diferente)]
Referências:
[Biblioteca]
Projeto VBA:
public sub ExibirNumeroRegistros
msgbox NumeroRegistros ' Vai ocorrer um erro, pois a tabela "tblMinhaTabela" não existe neste banco de dados.
end sub
A referência a CurrentDb vai ser ao Outro banco e não a [Biblioteca].
O estranho é que um formulário dentro de [Biblioteca] consegue achar a tabela, se estiver ligado a ela. Então, se eu abrí-lo por uma chamada de uma função em [Biblioteca], tudo ocorre bem.
Desde já agradeço se alguém puder me ajudar.