Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por MrSantos
#66279
Boa noite Gurus,

Tenho uma base que possuem duas colunas de datas e gostaria de criar uma Macro a qual apareça para o usuário uma mensagem de erro quando houver uma data preenchida maior que a atual.

Incialmente criei um código, mas sigo com alguns problemas pois a base (tem 40 mil linhas) possuem linhas em brancas e não sei como aplicar o Loop para duas colunas e linhas em brancas. Poderiam me aconselhar qual modificação fazer no código abaixo ?

Dim Linha As Double
Linha = 1

With Plan1

Do

Linha = Linha + 1

If .Cells(Linha, 38).Value > Date Then
Erro = MsgBox("DATA DE ENTREGA MAIOR QUE A DATA ATUAL", vbOKOnly, "Erro")
End If

If .Cells(Linha, 40).Value > VBA.Date Then
Erro = MsgBox("DATA DA BAIXA MAIOR QUE A DATA ATUAL", vbOKOnly, "Erro")
Exit Do
End If

Loop Until .Cells(Linha, 38).Value = ""

End With
#66286
Experimente:
Código: Selecionar todos
Sub teste()
 Dim Linha As Long
  With Plan1
   For Linha = 2 To .Cells(Rows.Count, 38).End(3).Row
    If .Cells(Linha, 38) > Date Or .Cells(Linha, 40) > Date Then
     MsgBox "NA LINHA " & Linha & " HÁ DATA MAIOR QUE A DATA ATUAL", vbOKOnly, "Erro"
    End If
   Next Linha
  End With
End Sub
#
Eu sugiro uma outra abordagem: que a verificação da data seja feita ao inseri-la, via um código disparado pelo evento Worksheet_Change.
MrSantos agradeceu por isso
#66301
Olá Osvaldo, primeiramente muito obrigado pela sugestão a qual irei adotar seu código.

Como eu poderia acrescentar mais um IF para as Colunas 38 e 40 para validar data abaixo do dia 01/01/2017 e retornar um MsgBox "Data abaixo do esperado" ?
#66303
Olá, @MrSantos .

Experimente este. Acrescentei a nova condição.
Código: Selecionar todos
Sub testeV2()
 Dim Linha As Long
  With Plan1
   For Linha = 2 To .Cells(Rows.Count, 38).End(3).Row
    If .Cells(Linha, 38) > Date Or .Cells(Linha, 40) > Date Then
     MsgBox "NA LINHA " & Linha & " HÁ DATA MAIOR QUE A DATA ATUAL", vbOKOnly, "Erro"
    ElseIf .Cells(Linha, 38) <> "" And .Cells(Linha, 38) < #1/1/2017# Or .Cells(Linha, 40) <> "" And .Cells(Linha, 40) < #1/1/2017# Then
     MsgBox "NA LINHA " & Linha & " HÁ DATA ANTERIOR A 01/01/2017", vbOKOnly, "Erro"
    End If
   Next Linha
  End With
End Sub
MrSantos agradeceu por isso
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord