使用VBA提取条码数据



我需要帮助。我开发了一个Excel表格,当我扫描员工条形码时,它将提取base-32代码信息,这样我就可以使用不同的公式获得员工ID号、名字和姓氏。Excel表

唯一的问题是提取这些数据的公式是不同的,基于如何开始的代码在Excel工作表中看到。我可以在O365上的Excel中使用IFS公式,但我们所有的机构都使用标准桌面版本的Excel。

我的问题;是否有一种方法来编码出在VBA,当一个ID被扫描,不管什么扫描的代码开始,它将执行所需的公式提取三项我需要这是ID,名字和姓氏?下面是我使用的公式:

以" "开头扫描

Base-32 =中期(A2、2、7)

First Name =PROPER(MID(A2,17,20))

Last Name =PROPER(MID(A2,38,20))

扫描以"N"开头

Base-32 =中期(A3 9 7)

First Name =PROPER(MID(A3,16,20))

Last Name =PROPER(MID(A3,36,26))

扫描以"C"开头

Base -32 =MID(A4,8,7)

First Name =PROPER(MID(A4,15,20))

Last Name =PROPER(MID(A4,35,20))

ID号

它们每个的ID号计算相同(基于扫描进入的单元格),使用:

=如果(C2 =","0",SUMPRODUCT(权力(32岁,LEN (C2)行(间接("1:",LEN (C2)))),(代码(上层(中期(C2,行(间接("1:",LEN (C2))), 1))) -48 *(代码(中期(C2,行(间接("1:",LEN (C2))), 1)) & lt; 58) -55 *(代码(中期(C2,行(间接("1:",LEN (C2))), 1))在64年))))

提前感谢任何可以帮助你的人。

不确定这是否完全符合您的需求,但是可以使用以下UDF来检索数据:

Function GetData(inp As String, grp As Long) As String
With CreateObject("VBScript.RegExp")
.Pattern = "^(?:M|N.{7}|C.{6})(.{7})S*([A-Z][a-z]+)s*(S+)"
If .Test(inp) Then
GetData = .Execute(inp)(0).Submatches(grp - 1)
Else
GetData = "No Data Found"
End If    
End With
End Function

这是一个在线演示模式是如何工作的。它将匹配:

  • ^-起始行锚。
  • (?:M|N.{7}|C.{6})-一个非捕获组,用于捕获文字'M',文字'N'后面跟着7个字符,换行符、除外一个文字'C'后面跟着6个这样的字符。
  • (.{7}-然后第一个捕获组7个字符模仿MID()功能,捕获Base-32代码。
  • S*- 0+(贪婪)非空白字符,最多:
  • ([A-Z][a-z]+)-第二个捕获组,通过单个大写字母和1+(贪心)小写字母捕获姓氏。
  • s*- 0+(贪婪)空白字符最多:
  • (S+)-通过1+(贪婪)非空白字符捕获第一个名称的第三个捕获组。

您将通过=GetData(A1,1)在工作表中调用此函数以获得'Base-32'代码,并使用整数2获得姓氏,使用3获得名字。我希望这对你有帮助。

最新更新