Notifications
Clear all

Campo Obrigatório

5 Posts
3 Usuários
0 Reactions
918 Visualizações
(@romanholi)
Posts: 0
New Member
Topic starter
 

Pessoal, bom dia!

Tenho um formulário com muitos textbox's para preenchimento.

Tem alguma forma de torná-los obrigatório de uma só vez, sem ter que fazer condição por condição.

Não tem problema que não dê o foco (Mas se der é melhor) e também pode ser uma unica mensagem: "Ainda faltam dados a serem preenchidos"

Veja a ação do meu botão:

Private Sub Cmd_Apontar_Click()


If Me.Cmb_Matriz = "" Then

MsgBox "Selecione Matriz para o Apontamento"

Else







Dim Linha As String

Linha = 2
Do Until Sheets(Shname).Cells(Linha, 2) = ""
Linha = Linha + 1
Loop
    

Sheets(Shname).Cells(Linha, 2) = Frm_Apontamento.Txt_Data
Sheets(Shname).Cells(Linha, 3) = Frm_Apontamento.Cmb_Turnos
Sheets(Shname).Cells(Linha, 4) = Frm_Apontamento.Cmb_Matriz
Sheets(Shname).Cells(Linha, 5) = Frm_Apontamento.Cmb_Padrao
Sheets(Shname).Cells(Linha, 6) = Frm_Apontamento.Txt_Chapas

' APONTAMENTO CHAPA 01

Sheets(Shname).Cells(Linha, 20) = Frm_Apontamento.Txt_Apt_C1_01
Sheets(Shname).Cells(Linha, 21) = Frm_Apontamento.Txt_Apt_C1_02
Sheets(Shname).Cells(Linha, 22) = Frm_Apontamento.Txt_Apt_C1_03
Sheets(Shname).Cells(Linha, 23) = Frm_Apontamento.Txt_Apt_C1_04
Sheets(Shname).Cells(Linha, 24) = Frm_Apontamento.Txt_Apt_C1_05
Sheets(Shname).Cells(Linha, 25) = Frm_Apontamento.Txt_Apt_C1_06
Sheets(Shname).Cells(Linha, 26) = Frm_Apontamento.Txt_Apt_C1_07
Sheets(Shname).Cells(Linha, 27) = Frm_Apontamento.Txt_Apt_C1_08
Sheets(Shname).Cells(Linha, 28) = Frm_Apontamento.Txt_Apt_C1_09
Sheets(Shname).Cells(Linha, 29) = Frm_Apontamento.Txt_Apt_C1_10
Sheets(Shname).Cells(Linha, 30) = Frm_Apontamento.Txt_Apt_C1_11
Sheets(Shname).Cells(Linha, 31) = Frm_Apontamento.Txt_Apt_C1_12
Sheets(Shname).Cells(Linha, 32) = Frm_Apontamento.Txt_Apt_C1_13
Sheets(Shname).Cells(Linha, 33) = Frm_Apontamento.Txt_Apt_C1_14
Sheets(Shname).Cells(Linha, 34) = Frm_Apontamento.Txt_Apt_C1_15
Sheets(Shname).Cells(Linha, 35) = Frm_Apontamento.Txt_Apt_C1_16
Sheets(Shname).Cells(Linha, 36) = Frm_Apontamento.Txt_Apt_C1_17
Sheets(Shname).Cells(Linha, 37) = Frm_Apontamento.Txt_Apt_C1_18
Sheets(Shname).Cells(Linha, 38) = Frm_Apontamento.Txt_Apt_C1_19
Sheets(Shname).Cells(Linha, 39) = Frm_Apontamento.Txt_Apt_C1_20
Sheets(Shname).Cells(Linha, 40) = Frm_Apontamento.Txt_Apt_C1_21
Sheets(Shname).Cells(Linha, 41) = Frm_Apontamento.Txt_Apt_C1_22
Sheets(Shname).Cells(Linha, 42) = Frm_Apontamento.Txt_Apt_C1_23
Sheets(Shname).Cells(Linha, 43) = Frm_Apontamento.Txt_Apt_C1_24
Sheets(Shname).Cells(Linha, 44) = Frm_Apontamento.Txt_Apt_C1_25
Sheets(Shname).Cells(Linha, 45) = Frm_Apontamento.Txt_Apt_C1_26
Sheets(Shname).Cells(Linha, 46) = Frm_Apontamento.Txt_Apt_C1_27
Sheets(Shname).Cells(Linha, 47) = Frm_Apontamento.Txt_Apt_C1_28
Sheets(Shname).Cells(Linha, 48) = Frm_Apontamento.Txt_Apt_C1_29
Sheets(Shname).Cells(Linha, 49) = Frm_Apontamento.Txt_Apt_C1_30
Sheets(Shname).Cells(Linha, 50) = Frm_Apontamento.Txt_Apt_C1_31
Sheets(Shname).Cells(Linha, 51) = Frm_Apontamento.Txt_Apt_C1_32
Sheets(Shname).Cells(Linha, 52) = Frm_Apontamento.Txt_Apt_C1_33
Sheets(Shname).Cells(Linha, 53) = Frm_Apontamento.Txt_Apt_C1_34
Sheets(Shname).Cells(Linha, 54) = Frm_Apontamento.Txt_Apt_C1_35
Sheets(Shname).Cells(Linha, 55) = Frm_Apontamento.Txt_Apt_C1_36



' APONTAMENTO CHAPA 02

Sheets(Shname).Cells(Linha, 56) = Frm_Apontamento.Txt_Apt_01
Sheets(Shname).Cells(Linha, 57) = Frm_Apontamento.Txt_Apt_02
Sheets(Shname).Cells(Linha, 58) = Frm_Apontamento.Txt_Apt_03
Sheets(Shname).Cells(Linha, 59) = Frm_Apontamento.Txt_Apt_04
Sheets(Shname).Cells(Linha, 60) = Frm_Apontamento.Txt_Apt_05
Sheets(Shname).Cells(Linha, 61) = Frm_Apontamento.Txt_Apt_06
Sheets(Shname).Cells(Linha, 62) = Frm_Apontamento.Txt_Apt_07
Sheets(Shname).Cells(Linha, 63) = Frm_Apontamento.Txt_Apt_08
Sheets(Shname).Cells(Linha, 64) = Frm_Apontamento.Txt_Apt_09
Sheets(Shname).Cells(Linha, 65) = Frm_Apontamento.Txt_Apt_10
Sheets(Shname).Cells(Linha, 66) = Frm_Apontamento.Txt_Apt_11
Sheets(Shname).Cells(Linha, 67) = Frm_Apontamento.Txt_Apt_12
Sheets(Shname).Cells(Linha, 68) = Frm_Apontamento.Txt_Apt_13
Sheets(Shname).Cells(Linha, 69) = Frm_Apontamento.Txt_Apt_14
Sheets(Shname).Cells(Linha, 70) = Frm_Apontamento.Txt_Apt_15
Sheets(Shname).Cells(Linha, 71) = Frm_Apontamento.Txt_Apt_16
Sheets(Shname).Cells(Linha, 72) = Frm_Apontamento.Txt_Apt_17
Sheets(Shname).Cells(Linha, 73) = Frm_Apontamento.Txt_Apt_18
Sheets(Shname).Cells(Linha, 74) = Frm_Apontamento.Txt_Apt_19
Sheets(Shname).Cells(Linha, 75) = Frm_Apontamento.Txt_Apt_20
Sheets(Shname).Cells(Linha, 76) = Frm_Apontamento.Txt_Apt_21
Sheets(Shname).Cells(Linha, 77) = Frm_Apontamento.Txt_Apt_22
Sheets(Shname).Cells(Linha, 78) = Frm_Apontamento.Txt_Apt_23
Sheets(Shname).Cells(Linha, 79) = Frm_Apontamento.Txt_Apt_24
Sheets(Shname).Cells(Linha, 80) = Frm_Apontamento.Txt_Apt_25
Sheets(Shname).Cells(Linha, 81) = Frm_Apontamento.Txt_Apt_26
Sheets(Shname).Cells(Linha, 82) = Frm_Apontamento.Txt_Apt_27
Sheets(Shname).Cells(Linha, 83) = Frm_Apontamento.Txt_Apt_28
Sheets(Shname).Cells(Linha, 84) = Frm_Apontamento.Txt_Apt_29
Sheets(Shname).Cells(Linha, 85) = Frm_Apontamento.Txt_Apt_30
Sheets(Shname).Cells(Linha, 86) = Frm_Apontamento.Txt_Apt_31
Sheets(Shname).Cells(Linha, 87) = Frm_Apontamento.Txt_Apt_32
Sheets(Shname).Cells(Linha, 88) = Frm_Apontamento.Txt_Apt_33
Sheets(Shname).Cells(Linha, 89) = Frm_Apontamento.Txt_Apt_34
Sheets(Shname).Cells(Linha, 90) = Frm_Apontamento.Txt_Apt_35
Sheets(Shname).Cells(Linha, 91) = Frm_Apontamento.Txt_Apt_36

Call Limpar


MsgBox "Apontamento Realizado com Sucesso"


End If





End Sub

Obrigado

 
Postado : 24/01/2017 9:25 am
(@leandroxtr)
Posts: 0
New Member
 

Boa tarde, romanholi!

Desconheço uma única função ou formatação de TextBox que obrigue o preenchimento de todas de uma vez. No entanto, você pode fazer uso da função If e Elseif. Por exemplo:

If Me.Cmb_Matriz = "" Then
Msgbox "Selecione Matriz para o Apontamento"
Exit Sub
Elseif me.Cmb_Matriz_2 = "" Then
Msgbox "Selecione Matriz_2 para o Apontamento"
Exit Sub
Elseif me.Cmb_Matriz_3 = "" Then
Msgbox "Selecione Matriz_3 para o Apontamento"
Exit Sub

End If
Exit Sub

Ou você pode usar a Função "And" para determinar a mesma mensagem para qualquer campo não preenchido.

If Me.Cmb_Matriz = "" And Me.Cmb_Matriz_2 = "" And Me.Cmb_Matriz_3 = "" Then
Msgbox "Selecione todas as Matrizes para o Apontamento"
End If
Exit Sub

Esperto que tenha ajudado!

 
Postado : 24/01/2017 10:34 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde romanholi,

Você pode fazer um loop de verificação também.
Chapa 1:

    For i = 1 To 36
        If Frm_Apontamento.Controls("Txt_Apt_C1_" & Format(i, "00")).Value = Empty Then
            MsgBox "Ainda faltam dados a serem preenchidos"
            Exit For
        End If
    Next i

e Chapa 2:

    For i = 1 To 36
        If Frm_Apontamento.Controls("Txt_Apt_" & Format(i, "00")).Value = Empty Then
            MsgBox "Ainda faltam dados a serem preenchidos"
            Exit For
        End If
    Next i

Para o preenchimento... Para que não fique repetindo muito, você pode substituir isso:
Chapa 1:

    Sheets(Shname).Cells(Linha, 20) = Frm_Apontamento.Txt_Apt_C1_01
    Sheets(Shname).Cells(Linha, 21) = Frm_Apontamento.Txt_Apt_C1_02
    Sheets(Shname).Cells(Linha, 22) = Frm_Apontamento.Txt_Apt_C1_03
    Sheets(Shname).Cells(Linha, 23) = Frm_Apontamento.Txt_Apt_C1_04
    Sheets(Shname).Cells(Linha, 24) = Frm_Apontamento.Txt_Apt_C1_05
    Sheets(Shname).Cells(Linha, 25) = Frm_Apontamento.Txt_Apt_C1_06
    Sheets(Shname).Cells(Linha, 26) = Frm_Apontamento.Txt_Apt_C1_07
    Sheets(Shname).Cells(Linha, 27) = Frm_Apontamento.Txt_Apt_C1_08
    Sheets(Shname).Cells(Linha, 28) = Frm_Apontamento.Txt_Apt_C1_09
    Sheets(Shname).Cells(Linha, 29) = Frm_Apontamento.Txt_Apt_C1_10
    Sheets(Shname).Cells(Linha, 30) = Frm_Apontamento.Txt_Apt_C1_11
    Sheets(Shname).Cells(Linha, 31) = Frm_Apontamento.Txt_Apt_C1_12
    Sheets(Shname).Cells(Linha, 32) = Frm_Apontamento.Txt_Apt_C1_13
    Sheets(Shname).Cells(Linha, 33) = Frm_Apontamento.Txt_Apt_C1_14
    Sheets(Shname).Cells(Linha, 34) = Frm_Apontamento.Txt_Apt_C1_15
    Sheets(Shname).Cells(Linha, 35) = Frm_Apontamento.Txt_Apt_C1_16
    Sheets(Shname).Cells(Linha, 36) = Frm_Apontamento.Txt_Apt_C1_17
    Sheets(Shname).Cells(Linha, 37) = Frm_Apontamento.Txt_Apt_C1_18
    Sheets(Shname).Cells(Linha, 38) = Frm_Apontamento.Txt_Apt_C1_19
    Sheets(Shname).Cells(Linha, 39) = Frm_Apontamento.Txt_Apt_C1_20
    Sheets(Shname).Cells(Linha, 40) = Frm_Apontamento.Txt_Apt_C1_21
    Sheets(Shname).Cells(Linha, 41) = Frm_Apontamento.Txt_Apt_C1_22
    Sheets(Shname).Cells(Linha, 42) = Frm_Apontamento.Txt_Apt_C1_23
    Sheets(Shname).Cells(Linha, 43) = Frm_Apontamento.Txt_Apt_C1_24
    Sheets(Shname).Cells(Linha, 44) = Frm_Apontamento.Txt_Apt_C1_25
    Sheets(Shname).Cells(Linha, 45) = Frm_Apontamento.Txt_Apt_C1_26
    Sheets(Shname).Cells(Linha, 46) = Frm_Apontamento.Txt_Apt_C1_27
    Sheets(Shname).Cells(Linha, 47) = Frm_Apontamento.Txt_Apt_C1_28
    Sheets(Shname).Cells(Linha, 48) = Frm_Apontamento.Txt_Apt_C1_29
    Sheets(Shname).Cells(Linha, 49) = Frm_Apontamento.Txt_Apt_C1_30
    Sheets(Shname).Cells(Linha, 50) = Frm_Apontamento.Txt_Apt_C1_31
    Sheets(Shname).Cells(Linha, 51) = Frm_Apontamento.Txt_Apt_C1_32
    Sheets(Shname).Cells(Linha, 52) = Frm_Apontamento.Txt_Apt_C1_33
    Sheets(Shname).Cells(Linha, 53) = Frm_Apontamento.Txt_Apt_C1_34
    Sheets(Shname).Cells(Linha, 54) = Frm_Apontamento.Txt_Apt_C1_35
    Sheets(Shname).Cells(Linha, 55) = Frm_Apontamento.Txt_Apt_C1_36

Por isso:
Chapa 1:

    For i = 1 To 36
        Sheets(Shname).Cells(Linha, i + 19) = Frm_Apontamento.Controls("Txt_Apt_C1_" & Format(i, "00")).Value
    Next i

E também isso:
Chapa 2:

    Sheets(Shname).Cells(Linha, 56) = Frm_Apontamento.Txt_Apt_01
    Sheets(Shname).Cells(Linha, 57) = Frm_Apontamento.Txt_Apt_02
    Sheets(Shname).Cells(Linha, 58) = Frm_Apontamento.Txt_Apt_03
    Sheets(Shname).Cells(Linha, 59) = Frm_Apontamento.Txt_Apt_04
    Sheets(Shname).Cells(Linha, 60) = Frm_Apontamento.Txt_Apt_05
    Sheets(Shname).Cells(Linha, 61) = Frm_Apontamento.Txt_Apt_06
    Sheets(Shname).Cells(Linha, 62) = Frm_Apontamento.Txt_Apt_07
    Sheets(Shname).Cells(Linha, 63) = Frm_Apontamento.Txt_Apt_08
    Sheets(Shname).Cells(Linha, 64) = Frm_Apontamento.Txt_Apt_09
    Sheets(Shname).Cells(Linha, 65) = Frm_Apontamento.Txt_Apt_10
    Sheets(Shname).Cells(Linha, 66) = Frm_Apontamento.Txt_Apt_11
    Sheets(Shname).Cells(Linha, 67) = Frm_Apontamento.Txt_Apt_12
    Sheets(Shname).Cells(Linha, 68) = Frm_Apontamento.Txt_Apt_13
    Sheets(Shname).Cells(Linha, 69) = Frm_Apontamento.Txt_Apt_14
    Sheets(Shname).Cells(Linha, 70) = Frm_Apontamento.Txt_Apt_15
    Sheets(Shname).Cells(Linha, 71) = Frm_Apontamento.Txt_Apt_16
    Sheets(Shname).Cells(Linha, 72) = Frm_Apontamento.Txt_Apt_17
    Sheets(Shname).Cells(Linha, 73) = Frm_Apontamento.Txt_Apt_18
    Sheets(Shname).Cells(Linha, 74) = Frm_Apontamento.Txt_Apt_19
    Sheets(Shname).Cells(Linha, 75) = Frm_Apontamento.Txt_Apt_20
    Sheets(Shname).Cells(Linha, 76) = Frm_Apontamento.Txt_Apt_21
    Sheets(Shname).Cells(Linha, 77) = Frm_Apontamento.Txt_Apt_22
    Sheets(Shname).Cells(Linha, 78) = Frm_Apontamento.Txt_Apt_23
    Sheets(Shname).Cells(Linha, 79) = Frm_Apontamento.Txt_Apt_24
    Sheets(Shname).Cells(Linha, 80) = Frm_Apontamento.Txt_Apt_25
    Sheets(Shname).Cells(Linha, 81) = Frm_Apontamento.Txt_Apt_26
    Sheets(Shname).Cells(Linha, 82) = Frm_Apontamento.Txt_Apt_27
    Sheets(Shname).Cells(Linha, 83) = Frm_Apontamento.Txt_Apt_28
    Sheets(Shname).Cells(Linha, 84) = Frm_Apontamento.Txt_Apt_29
    Sheets(Shname).Cells(Linha, 85) = Frm_Apontamento.Txt_Apt_30
    Sheets(Shname).Cells(Linha, 86) = Frm_Apontamento.Txt_Apt_31
    Sheets(Shname).Cells(Linha, 87) = Frm_Apontamento.Txt_Apt_32
    Sheets(Shname).Cells(Linha, 88) = Frm_Apontamento.Txt_Apt_33
    Sheets(Shname).Cells(Linha, 89) = Frm_Apontamento.Txt_Apt_34
    Sheets(Shname).Cells(Linha, 90) = Frm_Apontamento.Txt_Apt_35
    Sheets(Shname).Cells(Linha, 91) = Frm_Apontamento.Txt_Apt_36

Por isso:
Chapa 2:

    For i = 1 To 36
        Sheets(Shname).Cells(Linha, i + 55) = Frm_Apontamento.Controls("Txt_Apt_" & Format(i, "00")).Value
    Next i

Obs. Declare a variável "i" como "long".

Código completo:

Option Explicit

Private Sub Cmd_Apontar_Click()
Dim ws      As Worksheet
Dim Linha   As Long
Dim i       As Long

    
    If Me.Cmb_Matriz = "" Then MsgBox "Selecione Matriz para o Apontamento": Exit Sub

    Application.ScreenUpdating = False

    ' VERIFICA PREENCHIMENTO CHAPA 01
    For i = 1 To 36
        If Frm_Apontamento.Controls("Txt_Apt_C1_" & Format(i, "00")).Value = Empty Then
            MsgBox "Ainda faltam dados a serem preenchidos"
            GoTo Finaliza
        End If
    Next i
    
    ' VERIFICA PREENCHIMENTO CHAPA 02
    For i = 1 To 36
        If Frm_Apontamento.Controls("Txt_Apt_" & Format(i, "00")).Value = Empty Then
            MsgBox "Ainda faltam dados a serem preenchidos"
            GoTo Finaliza
        End If
    Next i
    
    Set ws = ThisWorkbook.Worksheets(shname)
    Linha = ws.Cells(Rows.Count, 2).End(xlUp).Row
    
    ws.Cells(Linha, 2) = Frm_Apontamento.Txt_Data.Value
    ws.Cells(Linha, 3) = Frm_Apontamento.Cmb_Turnos.Value
    ws.Cells(Linha, 4) = Frm_Apontamento.Cmb_Matriz.Value
    ws.Cells(Linha, 5) = Frm_Apontamento.Cmb_Padrao.Value
    ws.Cells(Linha, 6) = Frm_Apontamento.Txt_Chapas.Value

    ' APONTAMENTO CHAPA 01
    For i = 1 To 36
        ws.Cells(Linha, i + 19) = Frm_Apontamento.Controls("Txt_Apt_C1_" & Format(i, "00")).Value
    Next i


    ' APONTAMENTO CHAPA 02
    For i = 1 To 36
        ws.Cells(Linha, i + 55) = Frm_Apontamento.Controls("Txt_Apt_" & Format(i, "00")).Value
    Next i

    Call Limpar
    MsgBox "Apontamento Realizado com Sucesso"
    
Finaliza:
    Set ws = Nothing
    Application.ScreenUpdating = True

End Sub

Qualquer coisa da o grito.
Abraço

 
Postado : 24/01/2017 11:09 am
(@romanholi)
Posts: 0
New Member
Topic starter
 

Obrigado Leandro e Bernardo!

Utilizei a do Bernardo, aliás, que simplificada no código kkkkk ficou muito mais prático! Muito show!
Funcionou perfeitamente!

Valeu mesmo meus amigos!

 
Postado : 24/01/2017 11:46 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Na verdade só ajustei o código para não haver muita repetição...

Simplificar acho que já resumiria mais um pouco ele... Tipo aproveitar alguns loops por exemplo...

Option Explicit

Private Sub Cmd_Apontar_Click()
Dim ws      As Worksheet
Dim Linha   As Long
Dim i       As Long

    If Me.Cmb_Matriz = "" Then MsgBox "Selecione Matriz para o Apontamento": Exit Sub

    ' VERIFICA PREENCHIMENTO CHAPA 01 e 01
    For i = 1 To 36
        If Frm_Apontamento.Controls("Txt_Apt_C1_" & Format(i, "00")).Value = Empty Or _
           Frm_Apontamento.Controls("Txt_Apt_" & Format(i, "00")).Value = Empty Then
            MsgBox "Ainda faltam dados a serem preenchidos"
            GoTo Finaliza
        End If
    Next i

    Application.ScreenUpdating = False
    Set ws = ThisWorkbook.Worksheets(shname)
    Linha = ws.Cells(Rows.Count, 2).End(xlUp).Row
   
    ws.Cells(Linha, 2) = Frm_Apontamento.Txt_Data.Value
    ws.Cells(Linha, 3) = Frm_Apontamento.Cmb_Turnos.Value
    ws.Cells(Linha, 4) = Frm_Apontamento.Cmb_Matriz.Value
    ws.Cells(Linha, 5) = Frm_Apontamento.Cmb_Padrao.Value
    ws.Cells(Linha, 6) = Frm_Apontamento.Txt_Chapas.Value

    ' APONTAMENTO CHAPA 01 e 01
    For i = 1 To 36
        ws.Cells(Linha, i + 19) = Frm_Apontamento.Controls("Txt_Apt_C1_" & Format(i, "00")).Value
        ws.Cells(Linha, i + 55) = Frm_Apontamento.Controls("Txt_Apt_" & Format(i, "00")).Value
    Next i

    Call Limpar
    MsgBox "Apontamento Realizado com Sucesso"
   
Finaliza:
    Set ws = Nothing
    Application.ScreenUpdating = True

End Sub

Qualquer coisa da o grito.
Abraço

 
Postado : 24/01/2017 11:59 am