在Access中使用SQL扩展数字范围

时间:2018-09-07 16:53:59

标签: sql vba ms-access

因此,我是一名物流工程师,我正在努力帮助我的价格经理建立一个定价应用程序工具,这将有助于消除她花费大量时间来填写有关定价出价信息的excel文件的时间。我已经成功构建了一个Access表单,可以填写她想要填写的区域,但是现在遇到了一个新问题:

每隔一段时间,她都会收到一个包含邮政编码的RFP(征求建议书)。例如:

enter image description here

现在要出价,她必须为该范围内的每个数字手动创建行。说到850-865范围,她必须对850、851、852,... 865进行排序。

我想知道是否可以在已经创建的Access表单中编写VBA或SQL代码,以为我扩展这些范围。

我希望它只需按一下宏按钮就可以给我:

enter image description here

侧面注意:对于第二个邮政编码范围(929-948、950-953、956-958),您将如何编译该代码,以便在逗号后扩展所有范围?

如果您能帮我这个忙,那么您绝对可以节省生命!

包含此信息的表的名称为tblTemplate。

谢谢大家!

1 个答案:

答案 0 :(得分:1)

您可以编写一些代码来执行此操作。代码量不长,但是是“棘手的”代码。

以下代码将“接近”您所需要的。以下代码是“空中代码”。这意味着这是我写的代码,没有任何语法或调试。

如果您不熟悉编写代码,我不确定以下内容对您有多大用处。但是,以下代码显示了如何解析“范围”并将记录添加到表中。

因此您可以执行此操作,但是您需要能够编写一些VBA代码的功能。如前所述,以下是如何编写此类代码的基本概述:

Sub ParseOut()

   Dim rst          As DAO.Recordset    ' input talbe
   Dim rstOut       As DAO.Recordset    ' output (expanded rows)
   Dim strBase      As String
   Dim strOutPut    As String

   Dim rZip         As Variant
   Dim rZips        As Variant
   Dim rStart       As Integer
   Dim rEnd         As Integer

   Dim oneRange     As Variant
   Dim range        As Integer

   strBase = "tblRanges"

   strOutPut = "tblOutRange"

   With CurrentDb() ' added this to reach min chars for edit, but this saves one CurrentDb (for sure 0,005 secs)
     Set rst = .OpenRecordset(strBase)
     Set rstOut = .OpenRecordset(strOutPut)
   End With

   Do While rst.EOF = False

      rZips = Split(rst!ZipCodes, ",")
      For Each rZip In rZips
         oneRange = Split(rZip, "-")
         If LBound(oneRange, 1) = 0 Then
            ' no "-", so single value
            rStart = oneRange(0)
            rEnd = rStart
         Else
            ' start/end range
            rStart = oneRange(0)
            rEnd = oneRange(1)
        End If

        ' add the range to the table
        For range = rStart To rEnd
           rstOut.AddNew
           rstOut!City = rst!City
           rstOut!State = rst!State
           rstOut!Zip = range
           rst.Update
         Next range
      Next rZip

      rst.MoveNext 
   Loop

   rst.Close
   rstOut.Close

End Sub