因此,我是一名物流工程师,我正在努力帮助我的价格经理建立一个定价应用程序工具,这将有助于消除她花费大量时间来填写有关定价出价信息的excel文件的时间。我已经成功构建了一个Access表单,可以填写她想要填写的区域,但是现在遇到了一个新问题:
每隔一段时间,她都会收到一个包含邮政编码的RFP(征求建议书)。例如:
现在要出价,她必须为该范围内的每个数字手动创建行。说到850-865范围,她必须对850、851、852,... 865进行排序。
我想知道是否可以在已经创建的Access表单中编写VBA或SQL代码,以为我扩展这些范围。
我希望它只需按一下宏按钮就可以给我:
侧面注意:对于第二个邮政编码范围(929-948、950-953、956-958),您将如何编译该代码,以便在逗号后扩展所有范围?
如果您能帮我这个忙,那么您绝对可以节省生命!
包含此信息的表的名称为tblTemplate。
谢谢大家!
答案 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