Compartilhar via

Utilizar funções criadas no Access através do VBA Excel

Anônima
2023-10-11T13:01:24+00:00

Estou realizando um controle de vendas integrando o excel ao access (telas e comandos no excel e dados gravados no access).

Preciso realizar uma consulta no banco para depois popular uma tela de pesquisa no excel e no comando SQL enviado do excel para o access preciso utilizar uma função que criei no access. Quando o faço o vba retorna com o seguinte erro:

"Erro em tempo de execução '-2147217900 (80040e14)':

Função 'GetList' indefinida na expressão."

Como faço para conseguir utilizar nas consultas ao banco feitas pelo VBA Excel as funções criadas no Access?

Utilizo o método ADO para conectar ao access.

A consulta é:

rs.Open "SELECT OS.[COD_OS],GetList('SELECT DISTINCT(PRODGRUPO.[GP_DES]) FROM DOCS,DOCS1,PROD,PRODGRUPO " _

& "WHERE DOCS.[FT_COD] = DOCS1.[FT_COD] AND DOCS1.[PD_COD] = PROD.[PD_COD] AND PROD.[GP_COD] = " _

& "PRODGRUPO.[GP_COD] AND DOCS.[FT_COD] = ' & OS.[FT_COD],'',', ') AS [GP_DES] FROM OS " _

& "WHERE OS.[OS_DATA] >= #2023-01-01# AND OS.[OS_DATA] <= #2023-10-31# ORDER BY OS.[COD_OS] ASC", cn, adOpenKeyset, adLockReadOnly

Função criada no Access:

Option Compare Database

Public Function GetList(SQL As String _

                        , Optional ColumnDelimeter As String = ", " \_ 

                        , Optional RowDelimeter As String = vbCrLf) As String 

Const PROCNAME = "GetList" 

Const adClipString = 2 

Dim sResult As String 

On Error GoTo ProcErr 

Set oConn = CurrentProject.Connection 

Set oRS = oConn.Execute(SQL) 

sResult = oRS.GetString(adClipString, -1, ColumnDelimeter, RowDelimeter) 

If Right(sResult, Len(RowDelimeter)) = RowDelimeter Then 

    sResult = Mid$(sResult, 1, Len(sResult) - Len(RowDelimeter)) 

End If 

GetList = sResult 

oRS.Close 

oConn.Close 

CleanUp:

    Set oRS = Nothing 

    Set oConn = Nothing 

Exit Function 

ProcErr:

    Resume CleanUp 

End Function

Microsoft 365 e Office | Excel | Para empresas | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

2 respostas

Classificar por: Mais útil
  1. Anônima
    2023-10-19T11:50:06+00:00

    Olá, Dio Xavier!

    Obrigado pelas boas vindas. Tudo bem com você?

    Estou com a referência "Microsoft Access 16.0 Object Library" habilitada, visto que meu access corresponde à essa versão, a função está publica (até coloquei o código na questão) e tenho chamado a função com a descrição que consta no access.

    Acredito que o passo acima sirva apenas para funções padrões do access (utilizo algumas funções padrões como por exemplo switch, iif e outras e funciona normalmente), para a função que criei no access não tem funcionado e retorna que a função está indefinida na expressão.

    Sobre a parte de sua orientação onde vc diz "Certifique-se de que a função esteja definida corretamente no Access":

    Como seria isso?

    E sobre "verifique se a função está definida em um módulo público no Access e se o módulo está aberto quando você executa o código VBA do Excel.":

    nas vezes que executei o banco estava fechado, ele é aberto apenas através do código, nesse caso entendo que não esteja aberto, certo?

    Esta resposta foi útil?

    0 comentários Sem comentários
  2. Dio Xavier 283.4K Pontos de reputação Moderador Voluntário
    2023-10-19T00:49:16+00:00

    Olá

    Bem vindo à Comunidade Microsoft 365 e Office

    Tudo bem, Júnior? Para utilizar funções criadas no Access através do VBA Excel, você precisa adicionar uma referência ao objeto do Access no VBA do Excel. Para fazer isso, siga os seguintes passos:

    1. Abra o VBA do Excel e vá em Ferramentas > Referências.

    2. Na janela de Referências, procure por "Microsoft Access xx.x Object Library" (onde xx.x é a versão do Access instalada no seu computador).

    3. Marque a caixa de seleção ao lado da referência e clique em OK.

    Depois de adicionar a referência, você pode chamar a função do Access no seu código VBA do Excel. Certifique-se de que a função esteja definida corretamente no Access e que o nome esteja escrito corretamente no seu código VBA do Excel. Se o erro persistir, verifique se a função está definida em um módulo público no Access e se o módulo está aberto quando você executa o código VBA do Excel.

    Esta resposta foi útil?

    0 comentários Sem comentários