Checkbox - seleção ...
 
Notifications
Clear all

Checkbox - seleção obrigatória

14 Posts
3 Usuários
0 Reactions
2,276 Visualizações
wfranca
(@wfranca)
Posts: 297
Reputable Member
Topic starter
 

Pessoal,

tenho as checkbox1 e checbox 2...

que código posso utilizar para obrigar a seleção de umas das duas através de um botão de comando em meu userform?

Welington Gonçalves

 
Postado : 01/10/2013 2:52 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

De uma maneira simplificada:

Private Sub CommandButton1_Click()
If Me.CheckBox1 = False And Me.CheckBox2 = False Then
 MsgBox "selecione uma opção"
 Exit Sub
 End If
 MsgBox "ok"
 
End Sub

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

 
Postado : 01/10/2013 5:42 pm
wfranca
(@wfranca)
Posts: 297
Reputable Member
Topic starter
 

José atribui esse código ao meu formulário... funcionou ao iniciar o userform... a partir do segundo item a ser inserido ele pula a obrigação de preencher a seleção para o meu txtmotivo como apresenta o código abaixo; e se eu não selecionar ele preenche minha planilha mesmo assim...

Private Sub btninserir_Click()

If txtCidade.Text = "" Then
MsgBox "INFORME A QUANTIDADE", vbExclamation, "Campo Obrigatório"
txtCidade.SetFocus

Exit Sub

End If

If CheckBox1 = False And CheckBox2 = False Then
MsgBox "Cliente ou Loja?", vbExclamation, "Campo Obrigatório"
Exit Sub
End If

If txtmotivo.Text = "" Then
MsgBox "INFORME O MOTIVO", vbExclamation, "Campo Obrigatório"
txtCidade.SetFocus
Exit Sub
End If

Dim UltimaLinha As Object

Set UltimaLinha = Plan1.Range("A2000").End(xlUp)

UltimaLinha.Offset(1, 0).Value = txtNomeEmpresa.Text
UltimaLinha.Offset(1, 1).Value = txtNomeContato.Text
UltimaLinha.Offset(1, 2).Value = txtCargoContato.Text
UltimaLinha.Offset(1, 3).Value = txtEndereco.Text
UltimaLinha.Offset(1, 4).Value = txtCidade.Text
UltimaLinha.Offset(1, 5).Value = txtRegiao.Text
UltimaLinha.Offset(1, 6).Value = txtCEP.Text
UltimaLinha.Offset(1, 7).Value = txtPais.Text
UltimaLinha.Offset(1, 8).Value = txtTelefone.Text
UltimaLinha.Offset(1, 9).Value = txtFax.Text
UltimaLinha.Offset(1, 10).Value = txtHomePage.Text
UltimaLinha.Offset(1, 12).Value = txtmotivo.Text
If Me.CheckBox1.Value = True Then UltimaLinha.Offset(1, 11).Value = "Cliente"
If Me.CheckBox2.Value = True Then UltimaLinha.Offset(1, 11).Value = "Loja"
MsgBox "Item inserido com sucesso..."

txtNomeEmpresa.Text = ""
txtNomeContato.Text = ""
txtCargoContato.Text = ""
txtEndereco.Text = ""
txtCidade.Text = ""
txtRegiao.Text = ""
txtCEP.Text = ""
txtPais.Text = ""
txtTelefone.Text = ""
txtFax.Text = ""
txtHomePage = ""
txtmotivo = ""
CheckBox1 = ""
CheckBox2 = ""
txtCodigoFornecedor.SetFocus

With txtCodigoFornecedor
.SetFocus
.SelStart = 0
.SelLength = Len(txtCodigoFornecedor.Text)

End With

End Sub

Welington Gonçalves

 
Postado : 02/10/2013 6:51 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

wfranca,

Bom Dia!

Precisa ser CheckBox? Porque você não coloca OptionButton que já são exclusivos por default? Você coloca 2 OptionButton e já define a propriedade Value = True de um deles que é o que será carregado na inicialização do formulário como selecionado. Se o usuário selecionar o segundo optionbutton, o primeiro perderá a seleção e seu código nunca ficará sem uma seleçã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 : 02/10/2013 7:26 am
wfranca
(@wfranca)
Posts: 297
Reputable Member
Topic starter
 

Wagner, também havia pensado nessa hipótese, mas infelizmente não para optar por ela... no caso da checkbox é para exatamente obrigar o usuário a marcar a seleção...

Welington Gonçalves

 
Postado : 02/10/2013 7:42 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Estranho, porque a lógica é essa sempre usei e funcionou. :?

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

 
Postado : 02/10/2013 8:06 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Wagner, também havia pensado nessa hipótese, mas infelizmente não para optar por ela... no caso da checkbox é para exatamente obrigar o usuário a marcar a seleção...

Franca, a ideia do Wagner é valida, é só deixar a Propriedade dois Options como "FALSE", assim eles não estarão selecionados por padrão, e depois fazer a verificação conforme a rotina que o Patropi passou alterando o tipo do controle, lembrando que o controle OptionButton não aceita ter os dois selecionados de uma vez, diferente do CheCkbox que se pode selecionar os dois.

Patropi, da forma que colocou funciona corretamente (isoladamente), mas pelo que vi na rotina do franca ele incluiu apos outras verificações que no meu entender apos da primeira execução e atendendo a primeira condição é pulado as demais condições.

Franca, procure evitar utilizar muitos IF .. com a instrução Exit Sub, isto pode causar problemas tipo o que comentou, quando queremos fazer a verificação de mais de uma condição, procure utilizar IF ... ELSEIF ...END IF, veja na ajuda do VBA sobre estas opçoes.

Como não tenho o modelo para testar, veja se da forma abaixo atende o que pretende.

Private Sub btninserir_Click()

If txtCidade.Text = "" Then
        MsgBox "INFORME A QUANTIDADE", vbExclamation, "Campo Obrigatório"
        txtCidade.SetFocus

    ElseIf CheckBox1 = False And CheckBox2 = False Then
    
        MsgBox "Cliente ou Loja?", vbExclamation, "Campo Obrigatório"
    
    
    ElseIf txtmotivo.Text = "" Then
        MsgBox "INFORME O MOTIVO", vbExclamation, "Campo Obrigatório"
        txtCidade.SetFocus

Else


    Dim UltimaLinha As Object
    
    Set UltimaLinha = Plan1.Range("A2000").End(xlUp)
    
    UltimaLinha.Offset(1, 0).Value = txtNomeEmpresa.Text
    UltimaLinha.Offset(1, 1).Value = txtNomeContato.Text
    UltimaLinha.Offset(1, 2).Value = txtCargoContato.Text
    UltimaLinha.Offset(1, 3).Value = txtEndereco.Text
    UltimaLinha.Offset(1, 4).Value = txtCidade.Text
    UltimaLinha.Offset(1, 5).Value = txtRegiao.Text
    UltimaLinha.Offset(1, 6).Value = txtCEP.Text
    UltimaLinha.Offset(1, 7).Value = txtPais.Text
    UltimaLinha.Offset(1, 8).Value = txtTelefone.Text
    UltimaLinha.Offset(1, 9).Value = txtFax.Text
    UltimaLinha.Offset(1, 10).Value = txtHomePage.Text
    UltimaLinha.Offset(1, 12).Value = txtmotivo.Text
    
    If Me.CheckBox1.Value = True Then UltimaLinha.Offset(1, 11).Value = "Cliente"
    
    If Me.CheckBox2.Value = True Then UltimaLinha.Offset(1, 11).Value = "Loja"
    MsgBox "Item inserido com sucesso..."
    
    txtNomeEmpresa.Text = ""
    txtNomeContato.Text = ""
    txtCargoContato.Text = ""
    txtEndereco.Text = ""
    txtCidade.Text = ""
    txtRegiao.Text = ""
    txtCEP.Text = ""
    txtPais.Text = ""
    txtTelefone.Text = ""
    txtFax.Text = ""
    txtHomePage = ""
    txtmotivo = ""
    CheckBox1 = ""
    CheckBox2 = ""
    txtCodigoFornecedor.SetFocus


    With txtCodigoFornecedor
        .SetFocus
        .SelStart = 0
        .SelLength = Len(txtCodigoFornecedor.Text)
    End With
    
End If

End Sub

Qualquer duvida retorne.
[]s

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

 
Postado : 02/10/2013 8:29 am
wfranca
(@wfranca)
Posts: 297
Reputable Member
Topic starter
 

Mauro, infelizmente o processo continuo pulando a etapa para obrigar a seleção... ele só obriga quando meu userform é iniciado...

Acho que vou aderir o processo do optbuttons mesmo.

Welington Gonçalves

 
Postado : 02/10/2013 8:57 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Mauro, infelizmente o processo continuo pulando a etapa para obrigar a seleção... ele só obriga quando meu userform é iniciado...

Acho que vou aderir o processo do optbuttons mesmo.

Franca, não entendi quando diz qe obriga só quando o form é iniciado, pois a rotina acima só é executada apos pressionar o Botão Private Sub btninserir_Click(), e da maneira que diz você tem outra rotina de verificação no evento que inicializa o formulario, dai não da certo.

Voce tem de definir quando será feito a verificação, se ao iniciar o formulário ou ao se clicar no botão.

[]s

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

 
Postado : 02/10/2013 9:05 am
wfranca
(@wfranca)
Posts: 297
Reputable Member
Topic starter
 

então...

quando eu inicio o meu projeto... e insiro o código através do meu button... ele funciona perfeitamente.. após o 2º item a inserir ele já não obriga a seleção das checkboks

Welington Gonçalves

 
Postado : 02/10/2013 9:16 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Se me permitem,
Creio que o motivo pelo qual funciona na "abertura" do formulário e depois deixa de faze-lo é pelo método de "limpeza" utilizado

txtmotivo = ""
CheckBox1 = ""
CheckBox2 = ""

txtCodigoFornecedor.SetFocus

Para check box deve-se utilizar "True" or "False"
Ficaria

...
txtmotivo = ""
CheckBox1 = False
CheckBox2 = False
txtCodigoFornecedor.SetFocus

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

 
Postado : 02/10/2013 9:25 am
wfranca
(@wfranca)
Posts: 297
Reputable Member
Topic starter
 

Boooooaaa Reinaldo....

Deu certo...

Só tenho a agradecer a todos vocês do planilhando... desde que participo desse fórum meu conhecimento só tem aumentado cada dia mais

Welington Gonçalves

 
Postado : 02/10/2013 10:08 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Se me permitem,
Creio que o motivo pelo qual funciona na "abertura" do formulário e depois deixa de faze-lo é pelo método de "limpeza" utilizado

txtmotivo = ""
CheckBox1 = ""
CheckBox2 = ""

txtCodigoFornecedor.SetFocus

Para check box deve-se utilizar "True" or "False"
Ficaria

...
txtmotivo = ""
CheckBox1 = False
CheckBox2 = False
txtCodigoFornecedor.SetFocus

Reinaldo, nem precisa pedir permissão, todas as colaborações são bem vindas.

Quando olhei a rotina me atentei somente ao inicio dos IF(s) e nem analisei o restante e como tambem não executei, nem percebi que no final tinha CheckBox1 = "", só agora depois que postou que vi.
Ainda bem que estava atento a este detalhe que me passou despercebido, grato pela ajuda.

[]s

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

 
Postado : 02/10/2013 11:03 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Achei aqui nos meus arquivos uma outra opção, tente ai.

Dim Checar As Boolean
Checar = False
Dim C As Object

For Each C In Controls
If TypeName(C) = "CheckBox" Then
If C.Value = True Then
Checar = True
End If
End If
Next C

'se não encontar nenhum CheckBox selecionado interrompe o proc...

If Checar = False Then
MsgBox "Selecione um setor", vbCritical, "A T E N Ç Ã O! ! !..."
Exit Sub
End If

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

 
Postado : 03/10/2013 6:32 pm