在vba中定义分隔符以进行访问

时间:2009-06-03 18:44:06

标签: ms-access vba

我在访问界面中使用条形码扫描仪来收集信息。我希望有一个条形码,其中包含多个信息示例:条形码,其中包含订单的价值和该订单上的特定商品。

我有分为“批次”的项目,这些项目按特定项目分组到这些批次中,每批次1项目类型。但订单可以有多种商品类型,因此每个订单可以有多个商品。我想在一个条形码中添加订单和批号。

看起来像* O961LA1450 *

星号开始和结束条形码。 O开始订货号961.L开始批号A1450。

我想定义一个分隔符“L”,用于分隔条形码以将批号与表单的批号进行比较,以检查它是否正确,然后使用正确的顺序填写表单上的订单号数。

任何人都可以解释如何定义分隔符或具有可提供的代码片段。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:2)

非常基本的例子:

Sub Main()

    Dim barcode As String

    barcode = "O961LA1450"

    ProcessBarcode (barcode)

End Sub

Function ProcessBarcode(barcode As String)

    Dim order As Long
    Dim lot As String
    Dim codes As Variant

    codes = Split(barcode, "L")
    order = CLng(Right(codes(0), Len(codes(0)) - 1))
    lot = codes(1)

    'for testing purposes:
    Debug.Print "Order: " & order & " Lot: " & lot
    'do comparing against other values here

End Function

结果:

Order: 961 Lot: A1450

答案 1 :(得分:1)

这种数据习惯使用固定长度的字段,因此您可以为订单号分配4个字符,为批号分配5个字符,这样就可以了:

  0961A1450

将被解析:

  Order Number: Left("0961A1450", 4)
  Lot Number:   Mid("0961A1450", 5, 5)

在分隔符上浪费空间的唯一原因是数据长度可变。我可能会为订单号分配5个字符,为批次编号分配6个字符以便将来进行校对(并适当填充)。例如,该示例将编码为:

  00961A01450

...你可能想以这种方式解析它以消除前导零:

  Order Number: Val(Left("00961A01450", 5))
  Lot Number:   Mid("00961A01450", 6, 1) & CStr(Val(Mid("00961A01450", 7, 5)))

毕竟,看起来分隔符似乎更容易,但我从未遇到过使用它们的条形码数据。如果您只编码两个数据,那么可能会更容易,因为您将前N个位置分配给您的第一个数据,之后的所有内容将是您的另一个数据,并且可以是任意长度。