Ir ao conteúdo
  • Cadastre-se

Excel VBA - Label Contar Itens da Coluna


Posts recomendados

Midori eu prefiro q a Label faça isso automático até porque não quero adicionar uma coluna extra de qntdes.. Ao abrir o Form, quero busque na coluna cada um dos itens e me retorne com as quantidades em cada Label conforme o produto tdeu...

Link para o comentário
Compartilhar em outros sites

@jcgmcs A quantidade de colunas é uma proprierade do próprio ListBox, não será uma "coluna extra". Ao abrir o Form a macro vai buscar os itens automaticamente colocar tudo nele.

 

Com Label só terá mais trabalho já que será necessário o dobro de controles para cada fruta. Nesse caso seriam 18 Labels. E quando/se entrar mais frutas na tabela? Vai ter que criar mais labels... Com ListBox basta criar um controle e depois é só ir adicionando os elementos nele.

Link para o comentário
Compartilhar em outros sites

Tndi.. nesse caso você tem razão mesmo.. a cada novo item tenho mesmo q mexer no código.. e no momento já tenho 85 itens.

Mas então, outra coisa éq meu projeto já todo feito em ListView e nem gosto muito de ListBox rsrs

Bem enfim, você pode me dar esse Help ae com o código nas Labels mesmo..?! Prefiro dessa maneira...

Link para o comentário
Compartilhar em outros sites

Dessa forma acho que faz mais sentido adicionar os controles/labels via código em vez de desenhar manualmente um por um.

 

Para isso tem o método Add de Control, p.ex,

 

Me.Controls.Add("Forms.Label.1", , True)

 

Você pode chamar Add em um loop para ir criando os labels enquanto atribuiu os nomes e as quantidades aos captions.

Link para o comentário
Compartilhar em outros sites

Para testar o código crie um formulário em branco.

 

Os controles serão adicionados a partir do canto superior esquerdo.

 

Se quiser mudar a posição é em Top e Left. 

 

Private Sub UserForm_Initialize()
    Dim lblFruta    As Control
    Dim lblConta    As Control
    Dim Fruta       As Range
    Dim Area        As Range
    Dim I           As Integer
    Dim Y           As Integer
    
    Set Area = [B5:B29]
    
    For Each Fruta In Area
        I = I + 1
        If WorksheetFunction.CountIf(Area(1).Resize(I), Fruta.Value) = 1 Then
            Set lblFruta = Me.Controls.Add("Forms.Label.1", , True)
            Set lblConta = Me.Controls.Add("Forms.Label.1", , True)
            
            lblFruta.Caption = Fruta.Value
            lblFruta.Top = Y
            lblFruta.Left = 5
            
            lblConta.Caption = _
                Format(WorksheetFunction.CountIf(Area, Fruta.Value), "00")
            lblConta.Left = 80
            lblConta.Top = Y
            Y = Y + 10
        End If
    Next Fruta
End Sub

 

Link para o comentário
Compartilhar em outros sites

Midori.. ficou Show de bola!!

Favor, agora preciso fazer uns ajustes..

Meu Form vae ter Largura 1032x600 Altura

Preciso de uma Margem superior para os Dados à partir da décima linha, tomando como referência os pontilhados do próprio Form tdeu!

Ajustar tbém para 3 colunas de produtos, ou seja, cada coluna deve ter 43 linhas tdeu!

É possível fazer tbém somente as contagens ficarem em Vermelho?

Link para o comentário
Compartilhar em outros sites

Para a margem superior você pode multiplicar a quantidade de pontos por 6 (acredito essa seja a distância entre os pontos) e atribuir esse valor a Top. A propriedade da cor do controle é ForeColor, atribua RGB(255,0,0) para deixar a color vermelha. Em relação ao ajuste das 3 colunas eu não entendi.

Link para o comentário
Compartilhar em outros sites

Veja se assim resolve.

 

Private Sub UserForm_Initialize()
    Const TOPO      As Integer = 54
    Const DIST_X    As Integer = 10
    Const DIST_Y    As Integer = 0
    Const W_FRUTA   As Integer = 80
    Const W_CONTA   As Integer = 10
    Dim lblFruta    As Control
    Dim lblConta    As Control
    Dim Fruta       As Range
    Dim Area        As Range
    Dim Y           As Integer
    Dim L_Frt       As Integer
    Dim L_Cnt       As Integer
    Dim Linha       As Long
    
    Set Area = [B5:B29]
    
    Y = TOPO
    L_Frt = 5
    
    For Each Fruta In Area
        If WorksheetFunction.CountIf(Area(1).Resize( _
        Fruta.Row - Area.Row + 1), Fruta.Value) = 1 Then
            Linha = Linha + 1
            Set lblFruta = Me.Controls.Add("Forms.Label.1", , True)
            Set lblConta = Me.Controls.Add("Forms.Label.1", , True)
            
            lblFruta.Width = W_FRUTA
            lblConta.Width = W_CONTA
            
            If Linha Mod 43 = 0 Then
                Y = TOPO
                L_Frt = L_Cnt + lblConta.Width + DIST_X
            End If
            
            lblFruta.Left = L_Frt
            lblConta.Left = lblFruta.Width + lblFruta.Left
            
            lblFruta.Caption = Fruta.Value
            lblConta.Caption = _
                Format(WorksheetFunction.CountIf(Area, Fruta.Value), "00")
            
            lblConta.ForeColor = RGB(255, 0, 0)
            
            lblFruta.Top = Y
            lblConta.Top = Y
            L_Cnt = lblConta.Left
            Y = Y + lblFruta.Height + DIST_Y
        End If
    Next Fruta
End Sub

 

Link para o comentário
Compartilhar em outros sites

beleza meu querido... você é o Cara!! Ficou Show de bola mesmo... rss

Depois vou adaptar no meu projeto e vamos ver se tudo funcionará bunitinho..

obrigado Midori.. Deus te abençoe ae e Sucesso neste 2024 pra VCs todos... Abç!

Link para o comentário
Compartilhar em outros sites

Midori socorro vei!

Fiz todos ajustes no código pra colocar dentro da MultiPage2 no "Initialize" e de maneira alguma consegui fazer exibir Dados na Page2. O código até tá funcionando  quando abro o Form mas os dados só aparecem no Form principal e não na Page2.

Vejae q arrastei um pouco a margem esquerda e os daods estão lá mas atrás da Page2 tdeu!

Essas colunas com JAN/24 não esquenta, isso é uma outra coisa que terei q fazer manualmente mesmo no decorrer do tempo beleza!

VBA Plnanilha Modelo - Label Contar Itens Coluna_Por Midori - MOD3 Multi-Page.jpg

Link para o comentário
Compartilhar em outros sites

Os dados são acrescentados na ordem que estão na planilha, então é só ordenar a tabela antes de abrir o formulário.

 

No Multipage tem a propriedade Pages, o índice do primeiro é zero. Para adicionar no segundo fica assim,

 

Me.MultiPage2.Pages(1).Controls.Add("Forms.Label.1", , True)

 

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!