Olá pessoALL!
Estou criando uma tabela em Excel pra controlar o upgrade de SSD de equipamentos do meu cliente.
N tabela criei uma coluna chama S/N que fica na coluna D e na E fica o serial dos SSD.
Todos os equipamentos tem serial de 9 dígitos, alfanumérico... Já os SSD tem serial que começa com "1401-" seguido de 15 dígitos numéricos, totalizando 20 caracteres.
Criei uma VBA para validar estes dados, onde na coluna D ele de forma simples verifica se tem nove dígitos, caso tenha salva o número caso tenha menos da uma MSG de erro e caso tenha mais ele salva só os primeiros 9 digito, que são os que eu preciso.
Já na Coluna "E" fiz uma verificação de se o valor digita começa com 1401- e em seguida tem os 15 dígitos, se sim salva o numero e se não tiver o 1401- ou não tiver os 15 dígitos depois ele da msg de erro.
Em ambos os casos ele deleta os espaços em branco antes ou depois do valor digitado e caracteres especiais.
Porém na coluna D funcionou perfeitamente... já na coluna E dá a msg de erro em anexo e aceita salvar qualquer valor digitado.
Sou leigo no assunto, e criei o código com ajuda de exemplos do Google e dicas do Chat GPT, mas mesmo assim travei neste erro e não consegui resolver, abaixo coloco o código que criei, então se alguém puder me ajudar, pediria para ser lúdico ou mostrar as alterações que deveria fazer de forma mais pratica... por que se for técnico não vou entender... rsrsrsrs
Desde já obrigado pela atenção de todos.
Marcelo Nascimento
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cel As Range
Dim valor As String
' Desativa eventos para evitar loops infinitos
Application.EnableEvents = False
' Verifica se a alteração ocorreu no intervalo D5:D500
If Not Intersect(Target, Me.Range("D5:D500")) Is Nothing Then
For Each cel In Target
If Not IsEmpty(cel.Value) Then
' Remove espaços extras no início e no fim
valor = Trim(cel.Value)
' Remove espaços internos extras
valor = Replace(valor, " ", "")
' Mantém apenas os primeiros 9 dígitos
If Len(valor) > 9 Then
valor = Left(valor, 9)
End If
' Verifica se o valor tem exatamente 9 caracteres numéricos
If Len(valor) <> 9 Or Not IsNumeric(valor) Then
MsgBox "Valor inválido!", vbExclamation
cel.ClearContents ' Limpa o conteúdo da célula
Else
' Atualiza a célula com o valor formatado
cel.Value = valor
End If
End If
Next cel
End If
' Verifica se a alteração ocorreu no intervalo E5:E500
If Not Intersect(Target, Me.Range("E5:E500")) Is Nothing Then
For Each cel In Target
If Not IsEmpty(cel.Value) Then
' Remove espaços extras no início e no fim
valor = Trim(cel.Value)
' Remove espaços internos extras
valor = Replace(valor, " ", "")
' Verifica se o valor tem exatamente 20 caracteres, começa com "1401-" e tem 15 caracteres numéricos após
If Len(valor) <> 20 Or Left(valor, 5) <> "1401-" Or Not IsNumeric(Mid(valor, 6, 15)) Then
MsgBox "Valor inválido! O valor deve começar com '1401-' e conter exatamente 15 caracteres numéricos após.", vbExclamation
cel.ClearContents ' Limpa o conteúdo da célula
End If
End If
Next cel
End If
' Reativa eventos
Application.EnableEvents = True
End Sub
Postado : 08/02/2025 8:54 pm