Фон:
- В ячейках с числовым форматированием в Excel цифры после 15-й заменены на нули (причина). Это поведение влияет на запись номеров кредитных карт, которые могут быть длиннее 15 цифр. Обход этого поведения в Excel заключается в форматировании ячеек, которые будут содержать номера кредитных карт (до ввода данных), как строк, а не чисел.
- Чтобы отобразить эту строку в более удобном для пользователя формате, я добавляю вспомогательный столбец, который берет строку и разбивает ее на части.
- Я делаю это, проверяя длину строки, и если она составляет 16 символов, я разбиваю ее на части 4 4 4 4 (канадская VISA/MC), а если она составляет 15 цифр, я разбиваю ее на части 3 6 5 (канадская Amex).
Вопрос:
Можете ли вы адаптировать мой код рабочего листа для VBA, чтобы динамически применять нужный формат к столбцу, содержащему строки моей кредитной карты, при каждом изменении данных?
решение1
Во-первых, вам определенно понадобится текстовый формат в вашем столбце B
. Потому что в противном случае Excel сделает свое дело до этого кода, поэтому код не сможет надежно выполнять работу.
Затем вам придется открыть окно VBA и открыть модуль рабочего листа, который вы хотите обновить автоматически. Вставьте внутрь этого модуля этот код:
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
(Спасибо,@Рон, для направления к Format
функции.)
В-третьих, обновите имя таблицы Table1
в коде, указав фактическое имя таблицы.
Worksheet_Change
этособытиекоторый срабатывает каждый раз, когда что-то меняется в рабочем листе. В этом коде мы сначала убеждаемся, что что-то изменилось именно в столбце номера кредитной карты, и только в этом случае начинаем проверять длину и изменять значения.