Ir ao conteúdo
  • Cadastre-se

Excel Soma coluna no banco Access e mostrar no label do excel


Ir à solução Resolvido por AfonsoMira,

Posts recomendados

Bom dia! Alguém saberia resolver essa bucha?

 

Tenho a seguinte situação em que tenho um banco de dados em access e tenho um formulário excel.

Meu objetivo é: fazer a soma da coluna do access (Cor) e exibir na label do excel. 

No meu exemplo eu coloquei três tipos de cor de coelhos.

Ou seja na label1 deve aparecer só a soma dos coelhos azul; Na label 2 dos coelhos brancos e na label3 dos coelhos pretos.

 

Entretanto, eu preciso que seja respeitado o seguinte critério para minha planilha não dar erro que pode ser qualquer uma das seguintes condicções.

1) Os dados só carregam se eu der um clique em algum botão (gerar relatorio)

2) Ou dados só devem carregar se o caminho do banco de dados estiver correto, caso contrário não soma e nem da erro.

 

Mas porque isso? É porque a depender do usuário que estiver logado ele pode apontar o banco de dados para outro local na rede. E já que meu código

que carrega o banco de dados puxa a informação da célula a1 da minha planilha excel, se o caminho estiver errado ele poderá dar erro por não achar o banco de dados (acredito que esse erro possar ocorrer).

 

 

A coluna do access que tem as cores dos coelhos está nomeada com a palavra (Cor)

 

Segue em anexo o modelo de planilha com o banco access. Desde já agradeço a ajuda de todos :D 

 

 

 

Projeto teste.rar

Link para o comentário
Compartilhar em outros sites

Em 11/05/2021 às 09:13, josequali disse:

Esses site tem os códigos mas ainda não consegui adaptar

 

https://docs.microsoft.com/pt-br/office/vba/api/access.application.dcount

https://stackoverflow.com/questions/45601001/dcount-in-access-vba

 

@Basole @AfonsoMira vcs saberiam?

 

 

o importante é que some. Esqueçam os critérios que eu coloquei. rs

Link para o comentário
Compartilhar em outros sites

@josequali Dica: grava uma macro e manualmente, cole os dados do access em um intervalo e insira o gráfico desejado referenciando os intervalos com as informações.

 

Desta forma fica mais fácil ajudarmos a adaptar este código,  na parte de importação dos dados do access e a exportação do gráfico como imagem *.Gif e o carregamento no userform. 

 

Link para o comentário
Compartilhar em outros sites

@Basole Esse tópico aqui não é gráfico, é soma das informações da coluna de acordo com critério. Eu usava no excel essa formula onde ela contava cada critério da coluna e exiba a contagem na label, mas não consegui adaptar para trazer do access para o userfom do excel.

 

Era esse o código no excel:

 

Label1 = WorksheetFunction.CountIf(Sheets("bancodedados").[BL:BL], "Interna")
Label2 = WorksheetFunction.CountIf(Sheets("bancodedados").[BL:BL], "Externa")

 

Ou seja ele contava na guia "bancodedados" na coluna BL o número de células com texto  "Interna" e "Externa" e exibia a contagem na label1 e label2 separadamente.

 

Quando somar era para ficar assim como nesta imagem abaixo no userforme

 

 

image.png.f96e1b90f969bafafce7bf4f76ff5554.png

Vi que nesse site abaixo o pessoal também faz assim, mas não consegui adaptar para referencia a coluna do access, fazer a soma e exibe na label do excel. 

 

https://docs.microsoft.com/pt-br/office/vba/api/access.application.dcount

https://stackoverflow.com/questions/45601001/dcount-in-access-vba

 

 

Não sei se consegui explicar direito, rs, mas desde já agradeço a ajuda e disponibilidade :D 

 

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@josequali Boas,

Experimente o seguinte código na inicialização do form.

 

Spoiler

Private Sub UserForm_Initialize()

Dim strSQL As String

Conectdb
    
    'Contar Azuis
    strSQL = "SELECT COUNT(Cor) FROM TabTeste WHERE Cor='Azul';"
    Set Rs = DB.Execute(strSQL)
    Label1 = Rs.Fields(0)
    Rs.Close
    Set rst = Nothing
    
    'Contar Brancos
    strSQL = "SELECT COUNT(Cor) FROM TabTeste WHERE Cor='Branco';"
    Set Rs = DB.Execute(strSQL)
    Label2 = Rs.Fields(0)
    Rs.Close
    Set rst = Nothing
    
    'Contar Pretos
    strSQL = "SELECT COUNT(Cor) FROM TabTeste WHERE Cor='Preto';"
    Set Rs = DB.Execute(strSQL)
    Label3 = Rs.Fields(0)
    Rs.Close
    Set rst = Nothing

FechaDb

End Sub

 

 

 

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, josequali disse:

Fiquei na duvida do Rs.Fields(0)

a que se refere o 0? é a coluna? e se for achei que fosse a 1. Buguei um pouco,rs

Sim, o Rs.Fields(0) se refere a coluna, a primeira coluna de um recorset é sempre 0. Já p Rs.Fields(1) iria buscar a segunda coluna.

Por exemplo:
Se o SQL fosse da seguinte maneira:

Select Animal, Cor
From TabTeste

 

Neste caso o Rs.Fields(0) dava retorno dos registo na coluna Animal e o Rs.Fields(1) daria retorno dos registos na coluna Cor
 

9 minutos atrás, josequali disse:

se importaria em explicar resumidamente o código?

 

Então resumidamente:

 

Aqui defino a instrução SQL para buscar na Base de Dados

strSQL = "SELECT COUNT(Cor) FROM TabTeste WHERE Cor='Azul';"

 

Depois, defino um RecordSet que vai buscar as informações passadas anteriormente na Instrução SQL

Set Rs = DB.Execute(strSQL)

 

De seguida defino que a Label1 vai ter a informação trazida pelo RecordSet (Rs) e que vai ser a primeira coluna Fields(0)

 Label1 = Rs.Fields(0)

 

No final fecho o RecordSet e digo que o seu valor é "nada"

Rs.Close
Set rst = Nothing

 

E assim repito para as restantes cores.

Espero que esteja bem explicado.

Se ficar com dúvidas é só dizer. :)
 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@AfonsoMira Estava fazendo um desdobramento para um sistema de notificação por usuário que também faz a soma, mas é um pouco diferente porque ele só soma se respeitar uma condição. Eu uso ele para indicar se o usuário tem alguma notificação direcionada especificamente para ele. No Excel eu fazia assim:

 

label1 = WorksheetFunction.CountIfs([T:T], txtusuario, Sheets("Bancodedados").[BV:BV], "<>")

 

Ou seja Conte a coluna T se o nome for o mesmo da txtusuario e o mesmo da coluna BV e este se for diferente de vazio

 

tentei ver algum código, mas esse realmente não achei


No meu caso no Access seria assim se na textbox (txtusuario) tiver o nome Jose e nas colunas Responsavel e Confereresposavel também estiver o nome jose, então ele deve somar e exibe na label1. E ele vai percorrendo as colunas e somando se for igual.

 

image.png.5bd413b0539528afd5e664f90432adc3.png

 

Vou deixar um modelo em anexo, não sei se ficou claro, mas desde já agradeço a ajuda :D 

 

 

Projeto teste.rar

@AfonsoMira Obrigado :D

Link para o comentário
Compartilhar em outros sites

  • 8 meses depois...

@josequali tente desta forma 

 

Private Sub UserForm_Initialize()
Dim Az As Single
Dim Br As Single

Set DB = New ADODB.Connection

   Conectdb

Set Rs = New ADODB.Recordset
  
  Rs.Open "SELECT * FROM TabTeste", DB

If Not Rs.EOF Then

 Rs.MoveFirst
 
Do While Rs.EOF = False
 
 If Rs!Cor = "Azul" Then Az = Az + 1
 If Rs!Cor = "Branco" Then Br = Br + 1
 Rs.MoveNext
 
Loop

    MsgBox "Cor Branco = " & Br & VBA.vbNewLine & _
            "Cor Azul = " & Az, 64, "Resultado"

 End If
 
  FechaDb

End Sub

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!