Notifications
Clear all

formulário de cadastro em VBA com checkbox

8 Posts
1 Usuários
0 Reactions
3,964 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal boa noite, eu preciso criar um formulário para o Excel e nele preciso usar alguns checkbox e neles eu tenho um campo ao lado, seria algo assim:
Opção A Valor
Opção B Valor
Opção C Valor

E de acordo com o checkbox que eu marcar eu preciso colocar em uma textbox ao lado o valor e caso isso nao aconteca o usuário precisa receber uma mensagem avisando ele disso na hora que clicar no botão "cadastrar".

Alguem poderia me ajudar???

 
Postado : 24/08/2009 7:37 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Exemplo rápido:
No UserForm1, tenho 3 OptionButtons (em vez do CheckBox), 1 TextBox1 e 1 CommandButton1.
Esteja certo que as 3 OptionButtons tenham a mesma Propriedade GroupName.
Precisa adaptar para seu arquivo.

Private Sub OptionButton1_Click()
TextBox1 = "Opção1"
End Sub

Private Sub OptionButton2_Click()
TextBox1 = "Opção2"
End Sub

Private Sub OptionButton3_Click()
TextBox1 = "Opção3"
End Sub

Private Sub CommandButton1_Click()
If OptionButton1.Value = False And OptionButton2.Value = False And OptionButton3.Value = False Then
MsgBox ("Favor selecionar uma opção!")
Else
Cells(1, 1) = TextBox1.Value
UserForm1.Hide
End If
End Sub

 
Postado : 25/08/2009 10:31 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Seria quase isso que eu preciso.
Uso o check box por estética apenas mas ao lado de cada um deles tem uma textbox, se ele for marcado o usuário deve escrever na textbox ao lado dele.

algo assim:

X ________ X_________ X__________ X__________

O usuário escolhe qual vai marcar mas precisa escrever algum valor ao lado dela caso isso nao aconteça ele deve ser avisado por uma msgbox

 
Postado : 25/08/2009 11:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Tenta assim então, para cada um dos CheckBoxes e TextBoxes:

Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
TextBox1.SetFocus
End If
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If TextBox1.Value = "" Then
Cancel = True
TextBox1.SetFocus
MsgBox ("Favor preencher TextBox1!")
End If

End Sub

 
Postado : 25/08/2009 11:36 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde sou eu novamente entrando em contato.
Estou aplicando o seu código na planilha mas tentei fazer de uma forma onde o usuário seja avisado de que a textbox referente a checkbox ao lado está vazia apenas quando clicasse em CADASTRAR, pense que se ele sempre tiver que dar um OK quando clicar na checkbox ficará algo chato para ele já que vai ter que cadastrar dezenas ou centenas de clientes por dia e caso a checkbox esteja marcada mas a textbox ao lado esteja vazia o usuário receberia uma mensagem de aviso e a textbox receberia o setfocus.
Gostaria de saber o que acha da minha idéia e se seria possível colocar esse código que eu acho que seria assim:

If CBX_VisaoSimples.Value = True AND TXT_VisaoSimples .Text = “” Then
MsgBox ("Favor preencher TXT_VisaoSimples!")
TXT_VisaoSimples.SetFocus
End IF

Esse procedimento seria feito para cada checkbox no botao cadastrar.

 
Postado : 25/08/2009 1:43 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

souexcel...

Utilize essa função, valida todos os checkbox que tiverem no userform

    'Ignora depuração de erro
    On Error Resume Next
    Dim chk As MSForms.Control
    Dim txt As MSForms.TextBox
    'Analisa todos os controles do formulário
    For Each chk In Me.Controls
        'Se o controle for um CheckBox
        If TypeOf chk Is MSForms.CheckBox Then
            'Se tiver marcado
            If chk.Value Then
                'Tenta pega o textbox referente ao check box
                Set txt = Me.Controls("TXT_" & Split(chk.Name, "_")(1))
                'Se ocorrer esse erro, significa que o nome do textbox não é o mesmo que o checkbox
                If Err = -2147024809 Then
                    'Avisa
                    MsgBox "A caixa de texto não possui o mesmo nome que o CheckBox correpondente !", vbExclamation
                    'Vai para a saida sem validar
                    GoTo NãoValidou
                Else
                    'Se tiver vazio
                    If txt.Value = "" Then
                        'Avisa
                        MsgBox "A caixa de texto '" & chk.Caption & "' esta vazia !!", vbCritical
                        Me.Controls("TXT_" & Split(chk.Name, "_")(1)).SetFocus
                        'Vai para a saida sem validar
                        GoTo NãoValidou
                    End If
                End If
            End If
        End If
        'Proximo controle
    Next chk
    'Validou todos
    ValidaComboText = True
    'Sai da função
    Exit Function
NãoValidou:
    'Algum controle não foi validado
    ValidaComboText = False
    'Finaliza
End Function

Chamada no CommandButton

Private Sub CommandButton1_Click()
    'Chama a função e verifica se validou
    If Not ValidaComboText Then Exit Sub
    'Se passar, ta validado
    MsgBox "Validado"
End Sub
 
Postado : 25/08/2009 2:51 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Adelson onde eu encaixaria o codigo que me passou? Nao sei qual o local onde ele entraria, seria no botao Cadastrar tambem?

 
Postado : 25/08/2009 6:49 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

o primeiro voce coloca na pagina de codigo do formulário..
O segundo é do botão cadastrar

 
Postado : 26/08/2009 9:01 am