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.
  • Avatar do usuário
  • Avatar do usuário
Avatar do usuário
Por FelipeAguiar
Posts Avatar
#14054
Bom dia Adrian,
Seu erro se deve pelo seguinte fato: Quando você digita a primeira vez, a célula está formatada como GERAL,
após o processamento de VBA ela fica formatada como DATA e sua macro está manipulando o a célula como STRING (FORMATADA DE FORMA GERAL) e não como data, para isso, basta pedir para a macro reformatar a célula como geral novamente para poder trabalhar como texto.

segue em anexo o arquivo com a correção.
Avatar do usuário
Por alexandrevba
Avatar
#14055
Bom dia!!

Mude o formato da célula para geral com a linha
Código: Selecionar todos
Range("D12").NumberFormat = "General"
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
Dim datestr As String
On Error GoTo EndMacro
Range("D12").NumberFormat = "General" 'Mude o formato da célula
If Application.Intersect(Target, Range("D12")) Is Nothing Then
'O intervalo corresponde a 1 linha na coluna "D", munde se necessário
Exit Sub
End If
If Target.Cells.Count > 1 Then
Exit Sub
End If
If Target.Value = "" Then
Exit Sub
End If
Application.EnableEvents = False
With Target
    If .HasFormula = False Then
        'Digite valores para datas coerentes, respeitando o prazo dos dias (até 31 dias), mêses (até 12 mêses)
        'Se digitar 4 caracteres, corresponderá a dias e mêses, exemplo: 1502 - será 15/02/2005
        'Para os anos , digite com os dois algarismos, exemplo: 2005 - digite: 05
        Select Case Len(.Value)
            Case 3 'para, 103 = 1/03/2005
                datestr = Left(.Value, 1) & "/" & Right(.Value, 2)
            Case 4 'para, 1505 = 15/05/2005
                datestr = Left(.Value, 2) & "/" & Right(.Value, 2)
            Case 5 'para 10705 = 1/07/2005
                datestr = Left(.Value, 1) & "/" & Mid(.Value, 2, 2) & "/" & Right(.Value, 2)
            Case 6 'para , 231005 = 23/10/2005
                datestr = Left(.Value, 2) & "/" & Mid(.Value, 3, 2) & "/" & Right(.Value, 2)
                'lembro que a formatação poderá ser alterada nas células conforme necessidade
            Case Else
            Err.Raise 0
        End Select
        .Value = DateValue(datestr)
    End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "A data digitada não é válida!"
Application.EnableEvents = True

End Sub
Att
Por Adrian
Posts
#14058
Alexandre, muito obrigado de coração!!!

Valeu meu parceiro!!!
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