У меня есть столбец кодов UPC, некоторые из которых имеют длину 7 цифр, и мне нужно преобразовать их в коды UPCA, состоящие из 12 цифр. Я использовал VBA ниже, чтобы создать модуль, который я вызываю в запросе на всех 7-значных UPC. Поле ItemUPCCode представляет собой краткий текст типа данных. Если я вручную добавлю ноль к 7-значному коду, то он будет работать нормально.

Пример: я изменяю 7482241 на 07482241 и результат 074820000041

Я хочу заставить столбец ItemUPCCode добавить ноль перед всеми 7-значными UPC, чтобы мне не пришлось делать это вручную. Если я использую функцию Format, то результат обрабатывается полностью как текст, поэтому код VBA не работает и выдает "Invalid".

Есть ли способ добавить ноль, не рассматривая его как текст, или настроить VBA для компенсации?

Вот мой код модуля:

Rem ***** BASIC *****
Public Function UPCE2UPCA(ByVal UPCE As String) As String
'
' Convert UPC-E to UPC-A format
'
' Written by Glenn J. Schworak (www.schworak.com)
'
Dim ValidDigits As String
Dim Mfg As String
Dim Prod As String

If Len(UPCE) <> 8 Or (Left(UPCE, 1) <> "0" And Left(UPCE, 1) <> "1") Then
'
' Return INVALID instead of a UPC-A code
'
UPCE2UPCA = "INVALID"
Else
'
' Convert the UPC-E to UPC-A
'
ValidDigits = Mid(UPCE, 2, 6)
Select Case Right(ValidDigits, 1)
Case "0"
Mfg = Left(ValidDigits, 2) & Right(ValidDigits, 1) & "00"
Prod = "00" & Mid(ValidDigits, 3, 3)
Case "1"
Mfg = Left(ValidDigits, 2) & Right(ValidDigits, 1) & "00"
Prod = "00" & Mid(ValidDigits, 3, 3)
Case "2"
Mfg = Left(ValidDigits, 2) & Right(ValidDigits, 1) & "00"
Prod = "00" & Mid(ValidDigits, 3, 3)
Case "3"
Mfg = Left(ValidDigits, 3) & "00"
Prod = "000" & Mid(ValidDigits, 4, 2)
Case "4"
Mfg = Left(ValidDigits, 4) & "0"
Prod = "0000" & Mid(ValidDigits, 6, 1)
Case Else
Mfg = Left(ValidDigits, 5)
Prod = "0000" & Mid(ValidDigits, 6, 1)
End Select
'
' Return the 12 digit UPC-A code
'
UPCE2UPCA = Left(UPCE, 1) & Mfg & Prod & Right(UPCE, 1)
End If
End Function

1 ответ1

0

Я закончил тем, что добавил это к моему VBA выше:

If Len(UPCE) = 7 Then
  UPCE = "0" + UPCE
End If

Добавление "0" перед любой 7-значной записью ItemUPCCode. Тогда это исправлено с помощью модуля, а не запроса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .