Fundo:
- As células formatadas com números no Excel têm dígitos além do 15º alterados para zeros (razão). Este comportamento afeta a gravação de números de cartão de crédito que podem ter mais de 15 dígitos. Uma solução alternativa para esse comportamento no Excel é formatar células que conterão números de cartão de crédito (antes de inserir os dados) como strings em vez de números.
- Para exibir essa string em um formato mais amigável, adiciono uma coluna auxiliar que pega a string e a separa.
- Eu faço isso testando o comprimento da string e se tiver 16 caracteres eu divido como 4 4 4 4 (VISA/MC canadense) e se tiver 15 dígitos eu divido como 3 6 5 (Amex canadense).
Pergunta:
Você pode adaptar o código da minha planilha para VBA para aplicar dinamicamente o formato desejado à coluna que contém as strings do meu cartão de crédito sempre que os dados forem alterados?
Responder1
Primeiro, você definitivamente precisará ter formato de texto em sua coluna B
. Porque, caso contrário, o Excel faz tudo antes desse código, então o código não pode fazer o trabalho de maneira confiável.
Em seguida, você terá que abrir a janela do VBA e abrir o módulo da planilha que deseja atualizar automaticamente. Dentro deste módulo cole este código:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Dim rIntersect As Range
On Error GoTo errH
Application.EnableEvents = False
Set rIntersect = Intersect(Me.Range("Table1[Text]"), Target)
If Not rIntersect Is Nothing Then
For Each c In rIntersect
If IsNumeric(c.Value) Then
If Len(c.Value) = 14 Then
c.Value = Format(c.Value, "@@@ @@@@@@ @@@@@")
ElseIf Len(c.Value) = 16 Then
c.Value = Format(c.Value, "@@@@ @@@@ @@@@ @@@@")
End If
End If
Next
End If
errH:
Application.EnableEvents = True
End Sub
(Obrigado,@Ron, para direcionar para a Format
função.)
Terceiro, atualize o nome da tabela Table1
no código com o nome real da tabela.
Worksheet_Change
é oeventoque é acionado sempre que algo muda na planilha. Neste código, primeiro garantimos que algo mudou exatamente na coluna do número do cartão de crédito, e somente neste caso começamos a verificar o comprimento e modificar os valores.