Notifications
Clear all

Estrutura de Repetição em Label e Textbox

15 Posts
3 Usuários
0 Reactions
1,992 Visualizações
(@apolonio)
Posts: 11
Active Member
Topic starter
 
For A = 1 To 15
    
        If fmrCriarRotinas.lbl1.Caption = "" Then
        
            fmrCriarRotinas.txt0.Text = ""
            fmrCriarRotinas.txt1.Text = ""
            fmrCriarRotinas.txt2.Text = ""
            fmrCriarRotinas.txt3.Text = ""
            fmrCriarRotinas.txt4.Text = ""
        
        End If
        
    B = B + 5
    
    Next
 

Tenho um userform com 15 label e 75 textbox.

Quero usar a estrutura de repetição acima, usando no lugar de "lbl1" usar "lblA" e no "txt1" ser "txtB+1".
Como faço isso?

   For A = 1 To 15
    
        If fmrCriarRotinas.lblA.Caption = "" Then
        
            fmrCriarRotinas.txtB.Text = ""
            fmrCriarRotinas.txtB+1.Text = ""
            fmrCriarRotinas.txtB+2.Text = ""
            fmrCriarRotinas.txtB+3.Text = ""
            fmrCriarRotinas.txtB+4.Text = ""
        
        End If
        
    B = B + 5
    
    Next

Obrigado

 
Postado : 31/05/2018 7:17 am
(@mprudencio)
Posts: 2749
Famed Member
 

Não entendi a ideia!

O que vc pretende fazer?

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 31/05/2018 7:36 am
(@apolonio)
Posts: 11
Active Member
Topic starter
 

Antes de salvar, fazer uma verificação se todos os campos(textbox, chamado de txt0, txt1...) estão com valores. Essa validação é a partir da label(lbl1, lbl2...).
Para cada label, tem 5 textbox, ou seja, se a label 1 estiver vazia, apagar todos os campos do textbox.

If fmrCriarRotinas.lbl1.Caption = "" Then

fmrCriarRotinas.txt0.Text = ""
fmrCriarRotinas.txt1.Text = ""
fmrCriarRotinas.txt2.Text = ""
fmrCriarRotinas.txt3.Text = ""
fmrCriarRotinas.txt4.Text = ""

End if

Depois vou fazer outra verificação. Se a label 1 estiver com valor, vou verificar se todos os text box estão com valores, caso contrario irei apagar todos.

If fmrCriarRotinas.lbl1.Caption <> "" Then

if fmrCriarRotinas.txt0.Text = "" or fmrCriarRotinas.txt1.Text = "" or fmrCriarRotinas.txt2.Text = "" or fmrCriarRotinas.txt3.Text = "" or fmrCriarRotinas.txt4.Text = "" then 

fmrCriarRotinas.txt0.Text = ""
fmrCriarRotinas.txt1.Text = ""
fmrCriarRotinas.txt2.Text = ""
fmrCriarRotinas.txt3.Text = ""
fmrCriarRotinas.txt4.Text = ""

End if
End if

Para não digitar "lbl1" com a "txt0, txt1, txt2, txt3, txt4" 15 vezes seguidas, quero criar uma estrutura de repetição, substituindo o "lbl1 por lblA" e o "txt0 por txtB, txt1 por txtB+1.."

Obrigado

 
Postado : 31/05/2018 7:47 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Apolonio,

Bom dia!

Seja muito bem vindo ao fórum.

Para aproveitar ao máximo o fórum e sempre manter o mesmo de forma organizada, sugiro ler os tópico da regras abaixo:
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

Algumas solicitações especiais que pedimos, por gentileza, ficar atento:
1 - Não inserir no titulo de suas postagens expressões como Help, Ajuda, etc. O título deve ser um resumo da sua necessidade para que outras pessoas que tenham a mesma dúvida possam efetuar a pesquisa e achar como foi resolvido.
2 - Não insira em suas mensagens frases todas escritas em letras maiúsculas. Isso, na Internet, é compreendido como gritos e muitos usuários sequer respondem somente por esse fato!
3 - Insira sempre um arquivo exemplo compactado com .ZIP aqui mesmo no fórum. Existe, logo abaixo da caixa de mensagens, uma aba chamada "Adicionar um anexo" para essa finalidade. O arquivo exemplo deve ser pequeno, com apenas 5 linhas no máximo, compactado com .ZIP e ter o mesmo layout (nome do arquivo, nome das abas/guias/folhas, mesma linha/coluna onde os dados se iniciam) do arquivo original. Links de arquivos enviados para sites de compartilhamento de arquivos, muitas vezes são bloqueados pelas empresas, por conterem muitos vírus. Alguns usuários que acessam o fórum a partir de empresas não conseguem baixar tais arquivos.
4 - Não utilize a ferramenta CITAR para inserir o inteiro teor das mensagens que lhe são encaminhadas como resposta. Citações, se estritamente necessárias ao entendimento da mensagem que você quer enviar, devem ser apenas de pequenos trechos das mensagens.
5 - Se for postar códigos VBA aqui no fórum, utilize a ferramenta CODE localizada logo no início da caixa de mensagens (quinto botão da esquerda para a direita). As linhas de código devem ficar entre as palavras "CODE e /CODE".
6 - Agradeça sempre às pessoas que lhe responderam e às mensagens que atenderam a necessidade de sua demanda. Esse agradecimento deve ser clicando na mãozinha que fica localizada ao lado da ferramenta CITAR. Lembre-se: o fórum é gratuito e esse é o único incentivo para as pessoas que prestam ajuda. Você pode agradecer a quantos usuários quiser.
7 - O título ou o texto das mensagens postadas não devem ser escritos todo em letras maiúsculas. Na internet, tudo escrito em letras maiúsculas é interpretado como gritos e muitos usuários sequer olham para esse tipo de mensagem.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 31/05/2018 7:52 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Apolonio,

Você deve fazer um For Each por cada controle do seu formulário, verificar que tipo de controle o laço está pegando (pelo nome do controle) e então fazer a programação que quiser de acordo com a sua necessidade.

Alguns dias atrás respondi uma pergunta semelhante e elabore o arquivo anexo. Veja e adapte as suas necessidades.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 31/05/2018 8:08 am
(@apolonio)
Posts: 11
Active Member
Topic starter
 

wagner, obrigado pela resposta.
Sou novato em VBA, na verdade, novato em linguagem de programação.
Não consegui usar a estrutura citada.

http://tinypic.com/r/20sf2b4/9

Estou criando um Gerenciador de Atividades, então assim, a label irá mostrar a quantidade de tempo liquido para determinada atividade.
Para evitar erros, bugs, vou verificar se o tempo liquido tem valor, pois se ele estiver vazio vou apagar todos os horarios que foram inseridos ali.
O mesmo é se ele tem valor, se ele tem valor, os 4 campos de horario tambem deve ter valor, caso contrario irei apaga-los.

Como eu passo o for each no Rótulo (label 1, com name lbl1) e depois nas Caixas de Texto (textbox0, com name txt0. textbox1, com name txt1...)???

OBS: Esse negocio escrito em azul é as label, como lbl1, lbl2, lbl3....
Obrigado

 
Postado : 31/05/2018 8:29 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Apolonio,

Por gentileza, não utilize em suas respostas citações de inteiro teor das mensagens que lhe são enviadas. Leia atentamente as orientações que postei para você logo acima.

Quanto a sua demanda fica muito difícil ensinar por escrito e a quem ainda não entende muito bem de VBA, principalmente, quando não se tem o arquivo para poder examinar, rodar e depurar o código.

Pelo exemplo que lhe passei, se você estudar o código, poderá entender. Ou então, anexe seu arquivo aqui mesmo no fórum, compactado com .ZIP. Nas orientações que postei para você também é mencionado como se faz a inserção de arquivos aqui no fórum.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 31/05/2018 8:37 am
(@apolonio)
Posts: 11
Active Member
Topic starter
 

blza wagner, aos poucos vou entendendo as linguagens tecnicas do forum rsrs

Tentei anexar o arquivo, porem ele esta superior a 50 KB.

http://tinypic.com/r/nobreu/9

A imagem acima é do meu userform. Como faço o laço de repetição em cada linha? Onde em cada linha tenho 5 textbox (txt0, txt1, txt3...) a 1 label (lbl1). Tambem lembrando que usarei a lbl1 para validar os dados das txt0, txt1...

No codigo que voce me enviou ele faz um laço com todos os textbox ou com todas a label.

 
Postado : 31/05/2018 8:59 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Apolonio,

Fiz um exemplo bem simples com comentários entre as linhas de código para que você possa entender. Use a mesma lógica para seu arquivo.

Veja, você não precisa verificar as labels para depois verificar as textbox. Bsta varrer todas as textbox. Se uma delas estiver vazia, você apresenta a mensagem ao usuário, seleciona a textbox que está vazia e abandona a rotina.

No arquivo anexo, basta você digitar alguma coisa em algumas caixas de texto e deixar outras vazias. Clique então em Salvar que o código vai fazer a verificação.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 31/05/2018 10:14 am
(@apolonio)
Posts: 11
Active Member
Topic starter
 

Wagner,

Exemplo perfeito, entendi a estrutura for each e como é uma variavel de controle, mas ainda nao sei como vou fazer pra resolver meu problema.

Simples, no seu arquivo tem 8 textbox, eles estão todos interligados.
No seu mesmo exemplo, quero que fique interligados os textbox1 até textbox4 (1 linha). Depois interligar textbox5 até textbox8 (2 linha).

Então se tem valor na textbox1, ele vai alertar que esta faltando na textbox2.. Quando inserir valor na textbox4 e clicar em salvar, ele vai aceitar.
O mesmo se for do textbox5 até textbox8, e não em todos

Não sei se estou sendo claro, mas não são todos os campos obrigatorios, e sim a "linha de caixa de texto".

 
Postado : 31/05/2018 11:32 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Apolonio,

Bom... em nenhum momento você falou que a obrigatoriedade de preenchimento era apenas para algumas caixas de texto. Sendo assim, fiz pequena modificação que verifica apenas as caixas de texto que precisam ser preenchidas (no meu exemplo, apenas as TextBox1, TextBox4 e TextBox8).

Para essas 3 TextBox eu atribui a propriedade TAG delas, em tempo de design ainda, o valor "S". Então, no código, basta descobrir quem está vazio e que a TAG é igual a "S".

Veja: não há necessidade de verificar linha por linha e também não há interligação alguma entre nada. Apenas você varre (com o laço For Each) todos os controles do formulário, descobre quem é caixa de texto, quem está vazio e com propriedade TAG igual a S e informa ao usuário isso.

Teste, no meu exemplo, as seguintes situações:
1 - Digite algo em todas as caixas de texto (obrigatórias e não obrigatórias) e depois clique em Salvar.
2 - Digite algo em quase todas (deixe apenas 1 obrigatória sem preencher) as caixas de texto (obrigatórias e não obrigatórias) e depois clique em Salvar.
3 - Digite algo em todas as caixas de texto (não obrigatórias) e depois clique em Salvar.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 31/05/2018 12:00 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Uma pergunta:

Pq vc esta usando 15 linhas da mesma informação?

Se eu entendi, estou supondo ja que o arquivo nao foi enviado, cada linha é uma linha de cadastro que vc estara fazendo.

Se esta é a ideia vc precisa apenas de 01 conjunto.

A cada conjunto preenchido vc pode gravar diretamente na planilha.

Se quiser visualisar os dados da planilha tem outras opções bem melhores que este monte de textbox em um formulario.

Uma Listbox funcionaria melhor que esse monte de caixa de texto

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 31/05/2018 1:55 pm
(@apolonio)
Posts: 11
Active Member
Topic starter
 
If (fmrCriarRotinas.lbl1.Caption <> "") And ((fmrCriarRotinas.txt0.Text = "") Or (fmrCriarRotinas.txt1.Text = "") Or (fmrCriarRotinas.txt2.Text = "") Or (fmrCriarRotinas.txt3.Text = "")) Then
        fmrCriarRotinas.txt0.Text = ""
        fmrCriarRotinas.txt1.Text = ""
        fmrCriarRotinas.txt2.Text = ""
        fmrCriarRotinas.txt3.Text = ""
        fmrCriarRotinas.txt4.Text = ""
        fmrCriarRotinas.lbl1.Caption = ""
    Else
        If (fmrCriarRotinas.lbl1.Caption = "") Then
        fmrCriarRotinas.txt0.Text = ""
        fmrCriarRotinas.txt1.Text = ""
        fmrCriarRotinas.txt2.Text = ""
        fmrCriarRotinas.txt3.Text = ""
        fmrCriarRotinas.txt4.Text = ""
        fmrCriarRotinas.lbl1.Caption = ""
        End If
    End If
    If (fmrCriarRotinas.lbl2.Caption <> "") And ((fmrCriarRotinas.txt5.Text = "") Or (fmrCriarRotinas.txt6.Text = "") Or (fmrCriarRotinas.txt7.Text = "") Or (fmrCriarRotinas.txt8.Text = "")) Then
        fmrCriarRotinas.txt5.Text = ""
        fmrCriarRotinas.txt6.Text = ""
        fmrCriarRotinas.txt7.Text = ""
        fmrCriarRotinas.txt8.Text = ""
        fmrCriarRotinas.txt9.Text = ""
        fmrCriarRotinas.lbl2.Caption = ""
    Else
        If (fmrCriarRotinas.lbl2.Caption = "") Then
        fmrCriarRotinas.txt5.Text = ""
        fmrCriarRotinas.txt6.Text = ""
        fmrCriarRotinas.txt7.Text = ""
        fmrCriarRotinas.txt8.Text = ""
        fmrCriarRotinas.txt9.Text = ""
        fmrCriarRotinas.lbl2.Caption = ""
        End If
    End If

Entendi perfeitamente, porem nao consegui pensar na logica.
Fiz ele manual, usando a estrutura If...

Teria uma outra alternativa, visto que tem uma logica (lbl1 com txt0,txt1,txt2,txt3,txt4)

 
Postado : 01/06/2018 3:11 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Apolonio,

Boa noite!

Faça assim: Salve seu arquivo original com outro nome e com apenas umas 5 linhas de modo que ele fique bem pequeno. Depois compacte com .ZIP e anexe-o aqui mesmo no fórum.

O arquivo salvo deverá ter a mesma disposição dos dados originais (nome das abas, linhas e colunas onde começam os dados, etc).

Aproveite e explique detalhadamente apenas quais são as caixas de texto que precisam ser preenchidas obrigatoriamente.

Desse modo, tenho condição de ver aqui e adaptar para você sem a necessidade desse monte de IF's.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 01/06/2018 7:36 pm
(@apolonio)
Posts: 11
Active Member
Topic starter
 

Gente, boa tarde
Consegui HAHHA

Obrigado

 
Postado : 03/06/2018 2:19 pm