Notifications
Clear all

Trabalhando com o While em uma Macro

6 Posts
3 Usuários
0 Reactions
1,759 Visualizações
wolneypk
(@wolneypk)
Posts: 188
Estimable Member
Topic starter
 

Senhores, sou novato no ramo de programação e por isso gostaria de pedir uma luz aos amigos.

Tenho um cadastro de clientes onde existe o campo NOME.
Existe também o botão CADASTRAR que é o gatilho para cadastrar tudo desse Form para uma Planilha.

O caso é o seguinte:
Quero fazer com que, se o camarada clicar em CADASTRAR e o campo NOME esteja em branco, apareça uma MsgBox de erro.
Caso contrário, ele cadastre normalmente os dados.
Estou aqui fritanto os miolos tentando utilizar a função While que vi em alguns outros códigos por ai.
Vejam como está:

Dim teste_cad_branco As Integer 'Criei uma variável para poder "quebrar o loop"

While teste_cad_branco = 0
    If ComboBox10.Value <> "" Then
        teste_cad_branco = 1
    Else
    End If
Wend

Só que tem algo de muito errado!
Se o campo NOME (Combobox10) estiver preenchido, normal! Sai do While tranquilo.
Mais se o campo NOME estiver em branco... fudeu! Loop infinito!

Como faço pra ele entender que ele tem que dar um tempo para o usuário digitar algo no campo NOME e não ficar freneticamente nesse loop maluco?
O caso é que se ele visse que o campo NOME esta em branco, ele deveria voltar para o começo do While a aguardar uma nova ação do usuário (neste caso, digitar algo no campo NOME e clicar em CADASTRAR novamente)
Desculpe a pergunta amigos. Pode parecer ridicula para alguns mais realmente tudo que sei, estou tentando desvendar na raça.
Nunca criei uma variável e muito menos usei o While.
Se puderem verificar os passos desse código, agradeço DEMAIS!

Forte abraço!

"O impossível, é só uma questão de tempo"

 
Postado : 13/03/2013 1:21 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

wolneypk,

Boa Tarde!

Não entendi muito bem a lógica da sua programação. Mas... vamos lá:

Você tem um botão chamado CADASTRAR que dispara a rotina que grava o que você tiver digitado no form na planilha. Nesse Form, você também tem um combobox onde o usuário deve selecionar o nome de um cliente para cadastrar e, ao selecionar esse nome no combo, o nome vai para uma caixa de texto do nome do cliente. É isso mesmo?

O que vocvê não quer: quye o usuário clique no botão CADASTRAR, estando com a caixa de texto relativa ao nome do cliente em branco. É isso mesmo?

Se for isso, você não precisa de um While ou de outro laço qualquer. Você só precisa testar, no início da rotina que efetuará o cadastrameneto, se o a caixa de texto está preenhida. Para fazer isso, utilize o código abaixo, supondo que sua TextBox se chama Txt_NomeCliente:

If Ttxt_NomeCliente.Text = "" Then
       Msgbox "O Campo Cliente está em Branco", vbDefaultButton1, "CAMPO EM BRANCO"
       Txt_NomeCliente.Setfocus
Else
       'Aqui entram as rotinas normais de cadastramento se a caixa de texto for diferente de branco.
End If

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 : 13/03/2013 1:42 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

O uso do while pressupoe-se um loop; tipo faça enquanto uma determinada condição não seja atendida, isso em execução fica um tanto quanto dificil aplicar;
porem para questionar se o campo foi ou não preencido basta o uso do "IF"

If combobox10.value ="" then
msgbox "É preciso informar o Nome"
         combobox10.setfocus
exit sub
end if

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 13/03/2013 1:45 pm
wolneypk
(@wolneypk)
Posts: 188
Estimable Member
Topic starter
 

Ótimo amigos!
Wagner, já tinha tentado usar a mesma função que vc tinha sugerido, mais eu tinha o seguinte problema: Supondo que o campo estivesse vazio, ele me jogava na tela o MsgBox só que ele continuava executando os código que vinham logo abaixo dele (que seriam os códigos que cadastravam os dados dos clientes no banco de dados, sendo que estavam todos vazios)

Já o mestre Reinaldo matou meu problema com a função Exit Sub, que para tudo e não executa o restante das funções abaixo.
Mais uma vez, desculpem a ignorancia no assunto.
Muitas vezes pensamos em uma solução maluca, sendo que a resposta é bem mais obvia do que imaginamos.

Muito Obrigado aos dois amigos e num forte abraço!

"O impossível, é só uma questão de tempo"

 
Postado : 15/03/2013 8:10 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

wolneypk,

Bom Dia!

Só mais um esclarecimento:

No código que coloquei, os comandos de cadastramento não serão executados pois, eles estão dentro do ELSE e, para lá, o ponteiro de execução só passará se o campo for diferente de branco.

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 : 15/03/2013 8:31 am
wolneypk
(@wolneypk)
Posts: 188
Estimable Member
Topic starter
 

Está ótimo Wagner!
Mais uma vez agradeço a atenção!
São amigos como vocês que mantém essa comunidade maravilhosa onde centenas de pessoas são ajudadas todos os dias!

Um forte abraço meu camarada!

"O impossível, é só uma questão de tempo"

 
Postado : 15/03/2013 8:33 am