Condição para lança...
 
Notifications
Clear all

Condição para lançamento do formulário

13 Posts
2 Usuários
0 Reactions
1,272 Visualizações
(@fcaoll89)
Posts: 11
Active Member
Topic starter
 

Bom dia pessoal,

Tenho uma dúvida simples, mas não estou conseguindo resolver (tenho conhecimentos bem básicos em VBA, então estou apanhando).
Tenho um formulário que lança dados financeiro em uma planilha (data, valor e categoria), gostaria de colocar uma condição para que, caso a data do lançamento seja anterior há três dias atrás que apareça uma msgbox de confirmação se o lançamento realmente deve ser efetuado... Ou seja, hoje é dia 30/03, se o usuário tentar fazer um lançamento com data do dia 26/03 para trás que ele tenha que confirma se essa realmente é a intenção dele.

Gostaria de fazer isso para diminuir as ocorrências de usuários que fazem lançamentos e erram o mês ou ano por distração bagunçando a conciliação de caixa.

Agradeço muito se alguém puder ajudar.

Até agora tentei alguma variações do código a seguir:

'[...continua]

ElseIf Me.txtdatapagamento.Value < Me.txtdatahoje.Value - 3 Then
MsgBox "A *DATA DE PAGAMENTO* do seu lançamento é superior a três dias atrás!" & vbNewLine & vbNewLine & "Tem certeza de que deseja realizar o lançamento?", vbOKOnly + vbCritical, "Atenção!"
txtpagorecebido.SetFocus

[continua...]
 
Postado : 30/03/2016 7:00 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia fcaoll89,

Sem mais detalhes do código é um pouco complicado, mas vê se resolve:

'[...continua]

Dim vbConfirma  As String

ElseIf Abs(Me.txtdatapagamento.Value - Me.txtdatahoje.Value) > 3 Then
vbConfirma = MsgBox("A *DATA DE PAGAMENTO* do seu lançamento é superior a três dias atrás!" & vbNewLine & vbNewLine & "Tem certeza de que deseja realizar o lançamento?", vbYesNo + vbCritical, "Atenção!")
If vbConfirma = vbNo Then
    txtpagorecebido.SetFocus
Exit Sub
End If

'[continua...]

Qualquer coisa da o grito.
Abraço

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

 
Postado : 30/03/2016 8:15 am
(@fcaoll89)
Posts: 11
Active Member
Topic starter
 

Bernardo,

Obrigado pela resposta.
Está dando erro de depuração.
A linha

ElseIf Abs(Me.txthoje.Value - Me.txtpagorecebido.Value) > 3 Then

apresenta "tipos incompatíveis".

O que pode ser?

Abraço

 
Postado : 30/03/2016 10:40 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cara, tem que ver como está puxando esses valores...
Tenta fazer isso:

'[...continua]

Dim vbConfirma  As String
Dim Data1       As Date
Dim Data2       As Date

Data1 = Me.txtdatahoje.Value
Data2 = Me.txtdatapagamento.Value

ElseIf Abs(Data1 - Data2) > 3 Then
vbConfirma = MsgBox("A *DATA DE PAGAMENTO* do seu lançamento é superior a três dias atrás!" & vbNewLine & vbNewLine & "Tem certeza de que deseja realizar o lançamento?", vbYesNo + vbCritical, "Atenção!")
If vbConfirma = vbNo Then
    txtpagorecebido.SetFocus
Exit Sub
End If

'[continua...]

Se não der, tenta me passar um modelo do form apenas de como está sendo preenchido.

Qualquer coisa da o grito.
Abraço

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

 
Postado : 30/03/2016 10:51 am
(@fcaoll89)
Posts: 11
Active Member
Topic starter
 

Bernardo,

Não está funcionando. Não sei explicar mas o código está passando batido.
Estou enviado um modelo do formulário para ajudar.

https://www.dropbox.com/s/e6d25j8klcztq ... .xlsm?dl=0

Aproveitando para uma outra dúvida, tenho uma formatação para a data para incluir as barras automaticamente enquanto digita, mas quando erra e tenta apagar a barra não pode ser apagada, tem que selecionar tudo e apagar a data toda e digitar novamente, você poderia me ajudar a resolver essa questão também?

Mais uma vez obrigado.

Cara, tem que ver como está puxando esses valores...
Tenta fazer isso:

'[...continua]

Dim vbConfirma  As String
Dim Data1       As Date
Dim Data2       As Date

Data1 = Me.txtdatahoje.Value
Data2 = Me.txtdatapagamento.Value

ElseIf Abs(Data1 - Data2) > 3 Then
vbConfirma = MsgBox("A *DATA DE PAGAMENTO* do seu lançamento é superior a três dias atrás!" & vbNewLine & vbNewLine & "Tem certeza de que deseja realizar o lançamento?", vbYesNo + vbCritical, "Atenção!")
If vbConfirma = vbNo Then
    txtpagorecebido.SetFocus
Exit Sub
End If

'[continua...]

Se não der, tenta me passar um modelo do form apenas de como está sendo preenchido.

Qualquer coisa da o grito.
Abraço

 
Postado : 30/03/2016 11:40 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde fcaoll89,

Dentro do que pediu... Vê se ajuda.

Qualquer coisa da o grito.
Abraço

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

 
Postado : 30/03/2016 12:31 pm
(@fcaoll89)
Posts: 11
Active Member
Topic starter
 

Bernardo,

Ficou top! Entendi seu raciocínio e depois tive uma nova ideia, acabei colocando o comando em outra área do código.
Modifiquei algumas vezes até funcionar, ficou interessante porque agora essa condição só vai alertar quem está fazendo lançamentos retroativos, quem fizer lançamentos futuros vai ficar livre para colocar qualquer data.

MUITO OBRIGADO!

Em relação à data, tem uma coisa interessante acontecendo, quando começa a digitar o teclado numérico que (fica à direita do teclado) desliga. Eu lembro que na primeira vez que trabalhei com a formatação de data a galera do fórum desconfiava que o comando SendKeys desligava o teclado, por alguma razão. Então tivemos que tirar. Esse problema acontece com você também?

Abraço,

 
Postado : 31/03/2016 8:30 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cara, aqui não acontece isso...

Tudo normal.
Qual a versão do seu Office?
Uso o Office 2007 SP3 aqui.

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

 
Postado : 31/03/2016 8:34 am
(@fcaoll89)
Posts: 11
Active Member
Topic starter
 

Uso o 2016(365) aqui.
Na época usava o 2010 e dava o mesmo problema.
Com o teclado numérico superior não rola esse problema.

 
Postado : 31/03/2016 8:36 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Troca os "Application.Sendkeys...." por isso:
txtvencimento

Me.txtvencimento.Value = Mid(Me.txtvencimento.Value, 1, Len(Me.txtvencimento.Value) - 1) & "/" & Right(Me.txtvencimento.Value, 1)

txtpagorecebido

Me.txtpagorecebido.Value = Mid(Me.txtpagorecebido.Value, 1, Len(Me.txtpagorecebido.Value) - 1) & "/" & Right(Me.txtpagorecebido.Value, 1)

Pra evitar um pouco de erro também, coloca isso no código:

Private Sub txtvencimento_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsDate(Me.txtvencimento.Value) Then
        MsgBox "Data inválida"
        Me.txtvencimento.BackColor = &HC0C0FF
        Me.txtvencimento.SetFocus
    Else
        Me.txtvencimento.BackColor = &H80000005
    End If
End Sub

(esse é do vencimento, mas é só repetir para o outro)

Qualquer coisa da o grito.
Abraço

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

 
Postado : 31/03/2016 8:52 am
(@fcaoll89)
Posts: 11
Active Member
Topic starter
 

Bernardo,

Fico excelente mais uma vez. Cara, obrigado, venho tentando resolver isso há muito tempo.

Em relação ao outro código para reduzir outros erros ele acontece o seguinte: quando você clica no campo da data (só clicar) e depois em outro campo qualquer ele retorna a mensagem de data inválida. Aí eu fiz assim e resolveu:

Private Sub txtvencimento_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    If IsNull(Me.txtvencimento) Or Me.txtvencimento.Value = "" Then
        Me.txtvencimento.BackColor = &H80000005
    Else
    If Not IsDate(Me.txtvencimento.Value) Then
        MsgBox "Data inválida"
        Me.txtvencimento.BackColor = &HC0C0FF
        Me.txtvencimento.SetFocus
    End If
    End If
    
End Sub

Alguma sugestão?

Mais uma vez obrigado!
Abraço,

 
Postado : 31/03/2016 9:38 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cara, funcionando e atendendo sua necessidade é o que importa.

Eu, particularmente faria assim:

Private Sub txtvencimento_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsDate(Me.txtvencimento.Value) And Len(Me.txtvencimento.Value) > 0 Then
        Me.txtvencimento.Value = Empty
        Me.txtvencimento.BackColor = &HC0C0FF
        MsgBox "Data inválida"
    Else
        Me.txtvencimento.BackColor = &H80000005
    End If
End Sub

Tenho uma planilha antiga interessante para essas validações. Estou atualizando ela mas ainda funciona. Dá uma olhada:
http://dpobjetivo.com.br/index.php/down ... dastro-nis

Para liberar, digite "BERNARDO MAIA" no "NOME" da categoria "funcionário" e clique duas vezes na logo.
Apesar de antiga e estou atualizando ela... tem bastante coisa interessante ali...

Qualquer coisa da o grito.
Abraço

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

 
Postado : 31/03/2016 10:00 am
(@fcaoll89)
Posts: 11
Active Member
Topic starter
 

Bernardo,

Solução completa totalmente funcional!
Cara, muito obrigado! Foi uma grande ajuda!

Agora, essa planilha que você me enviou, nunca vi isso, Bernardo. Que projeto TOP!
Consegui liberar, vou estudar muito, já vi que você usa várias validações interessantíssimas e pode deixar que faço questão de manter os créditos.

Mais uma vez, obrigado.
Grande abraço,

 
Postado : 02/04/2016 11:03 am