向未格式化为文本的字段添加前导零

向未格式化为文本的字段添加前导零

我有一列 UPC 代码,其中一些代码长度为 7 位,我需要将它们转换为 12 位的 UPCA 代码。我使用下面的 VBA 创建了一个模块,我将在查询所有 7 位 UPC 时调用该模块。“ItemUPCCode”字段是短文本数据类型。如果我手动将零添加到 7 位代码中,那么它就可以正常工作。

例如:我将 7482241 更改为 07482241,结果是 074820000041

我想强制 ItemUPCCode 列在所有 7 位 UPC 前面添加一个零,这样我就不必手动执行此操作。如果我使用 Format 函数,则结果将完全被视为文本,因此 VBA 代码不起作用并输出“无效”。

有没有办法可以添加零而不将其视为文本或调整 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

我最终将其添加到上面的 VBA 中:

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

在任何 7 位 ItemUPCCode 条目前面添加一个“0”。然后由模块而不是查询来修复。

相关内容