Fondo:
- Las celdas con formato numérico en Excel tienen dígitos más allá del 15 cambiados a ceros (razón). Este comportamiento afecta el registro de números de tarjetas de crédito que pueden tener más de 15 dígitos. Una solución alternativa a este comportamiento en Excel es formatear las celdas que contendrán números de tarjetas de crédito (antes de ingresar los datos) como cadenas en lugar de números.
- Para mostrar esta cadena en un formato más fácil de usar, agrego una columna auxiliar que toma la cadena y la divide.
- Hago esto probando la longitud de la cadena y si tiene 16 caracteres, la divido como 4 4 4 4 (VISA/MC canadiense) y si tiene 15 dígitos, la divido como 3 6 5 (Amex canadiense).
Pregunta:
¿Pueden adaptar el código de mi hoja de trabajo para que VBA aplique dinámicamente el formato deseado a la columna que contiene las cadenas de mi tarjeta de crédito cada vez que cambien los datos?
Respuesta1
Primero, definitivamente necesitarás tener formato de texto en tu columna B
. Porque de lo contrario Excel hace sus cosas antes de este código, por lo que el código no puede hacer el trabajo de manera confiable.
Luego, deberá abrir la ventana de VBA y abrir el módulo de la hoja de trabajo que desea actualizar automáticamente. Dentro de este módulo pega 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
(Gracias,@ron, para dirigir hacia la Format
función.)
En tercer lugar, actualice el nombre de la tabla Table1
en el código con el nombre real de su tabla.
Worksheet_Change
es eleventoque se activa cada vez que algo cambia en la hoja de trabajo. En este código, primero nos aseguramos de que algo haya cambiado exactamente en la columna del número de tarjeta de crédito, y solo en este caso comenzamos a verificar la longitud y modificar los valores.