Ir ao conteúdo

Posts recomendados

Postado

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...

Postado

@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.

Postado

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...

Postado

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.

Postado

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

 

Postado

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?

Postado

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.

Postado

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

 

Postado

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ç!

Postado

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

Postado

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)

 

Postado

Bom dia!!

Sim pensei em ordenar dessa maneira mas minhas colunas vae até Gy5000 e há muitas em que os dados não podem ser mudados de lugar (Linha) tdeu...

Postado

Você pode copiar a tabela para uma planilha temporária, para ordenar e puxar os dados dela.

 

Outra alternativa é criar uma tabela dinâmica numa aba oculta, para atualizar e deixar em ordem.

Postado
agora, jcgmcs disse:

Código: Me.MultiPage2.Pages(1).Controls.Add("Forms.Label.1", , True)

Ta dando Erro de compilação:  Era esperado: =

Atribuiu isso a lblFruta e lblConta?

Postado

Dá esse erro em qualquer posição q eu coloque esse código...

Nessas linhas com Fruta e Conta até o momento não tinha havido necessidade de alterá-las porisso nem mexi nelas...

Postado

  

22 minutos atrás, jcgmcs disse:

Dá esse erro em qualquer posição q eu coloque esse código...

 

Não é em qualquer posição, é na atribuição dos controles.

 

Como ficou o seu código? Em que parte acontece o erro?

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...