Ms access 如何将书籍分割/分发到箱子

Ms access 如何将书籍分割/分发到箱子,ms-access,Ms Access,我有一个列表,显示我们每个订单号有多少本书(按订单号排序),如下所示: **LIST 1:** **PO No** **TOTAL BOOKS** PO-0001 12 PO-0002 15 PO-0003 26 现在我想把这些书分为几箱,每箱最多10本。如下所示: LIST 2: **BOX NO** **BOOKS** **PO NO** 0001 BOO

我有一个列表,显示我们每个订单号有多少本书(按订单号排序),如下所示:

**LIST 1:**

**PO No**       **TOTAL BOOKS**
PO-0001              12
PO-0002              15
PO-0003              26
现在我想把这些书分为几箱,每箱最多10本。如下所示:

LIST 2:

**BOX NO**      **BOOKS**       **PO NO**
  0001         BOOK 1~10        PO-0001
  0002         BOOK 11~12       PO-0001
  0002         BOOK 1~8         PO-0002
  0003         BOOK 9~15        PO-0002
  0003         BOOK 1~3         PO-0003
  0004         BOOK 4~13        PO-0003
  0005         BOOK 14~23       PO-0003

如何通过查询或编码从列表1中自动生成列表2?

一个人解决了我的问题,因此在结束我的问题时,我添加了以下答案:

创建一个新表“PackingList”,其中包含字段“BoxNo”(长)、“PONo”(文本)、“TotalBooks”(长)、“StartNo”(长)和“EndNo”(长)。主键打开(BoxNo,PONo)

那么下面的代码应该会给出结果

Public Sub PackBooks()

 Dim db  As DAO.Database
Dim bk  As DAO.Recordset ' Books
Dim qdf As DAO.QueryDef

 Dim BoxNo       As Long ' No of box currently being packed
 Dim BooksInBox  As Long ' How many books are already in the box that is   currently being packed
 Dim BooksPacked As Long ' How many books are already packed for the current PONo
 Dim Remaining   As Long ' How many books remain to be packed for the current PONo
 Dim BooksToPack As Long ' How many books are to be packed for the current PONo into the current box
 Dim StartNo     As Long
 Dim EndNo       As Long

Set db = CurrentDb
Set qdf = db.CreateQueryDef("", "Delete * From PackingList") ' start with an empty packing list
 qdf.Execute dbFailOnError
 qdf.Close
 Set bk = db.OpenRecordset("Select * From Books Order By PONo")
 If Not bk.EOF Then
BoxNo = 1
BooksInBox = 0

 Do While Not bk.EOF
  BooksPacked = 0
  EndNo = 0

  Do While BooksPacked < bk!TotalBooks
     Remaining = bk!TotalBooks - BooksPacked
     If Remaining >= 10 - BooksInBox Then
        BooksToPack = 10 - BooksInBox
     Else
        BooksToPack = Remaining
     End If
     StartNo = EndNo + 1
     EndNo = StartNo + BooksToPack - 1

     Set qdf = db.CreateQueryDef("", " Insert Into PackingList (BoxNo, PONo, TotalBooks, StartNo, EndNo) " & _
                                     " Values (" & BoxNo & ", '" & bk!PONo & "', " & bk!TotalBooks & ", " & StartNo & ", " & EndNo & ")")
     qdf.Execute dbFailOnError
     qdf.Close

     BooksPacked = BooksPacked + BooksToPack
     BooksInBox = BooksInBox + BooksToPack
     If BooksInBox = 10 Then
        BoxNo = BoxNo + 1
        BooksInBox = 0
      End If
    Loop
    bk.MoveNext
 Loop
End If

 Set qdf = Nothing
  bk.Close
  Set bk = Nothing
  db.Close
  Set db = Nothing

 End Sub
Public Sub PackBooks()
Dim数据库作为DAO.Database
Dim bk作为DAO。记录集“书籍
将qdf设置为DAO.QueryDef
Dim BoxNo作为“当前正在包装的箱子编号”
Dim BooksInBox,只要“当前正在打包的箱子中已经有多少本书?”
“Dim books packed As Long”当前PONo已经打包了多少本书
“当前PONo还有多少书需要打包?”
Dim BooksToPack As Long“当前PONo要将多少本书打包到当前箱子中?”
暗淡的星星没有那么长
暗淡的尽头没有那么长
Set db=CurrentDb
设置qdf=db.CreateQueryDef(“,”从装箱单中删除“)”以空装箱单开始
qdf.executedbfailonerror
关闭
Set bk=db.OpenRecordset(“按PONo从图书订单中选择*)
如果不是bk.EOF,则
BoxNo=1
BooksInBox=0
不使用bk.EOF时请勿使用
书包=0
EndNo=0
当书籍包装=10-则
BooksToPack=10-图书收件箱
其他的
BooksToPack=剩余
如果结束
开始编号=结束编号+1
EndNo=StartNo+BooksToPack-1
设置qdf=db.CreateQueryDef(“,”插入到打包列表中(箱号、PONo、TotalBooks、开始号、结束号)&_
“值(“&BoxNo&”、“&bk!PONo&”、“&bk!TotalBooks&”、“&StartNo&”、“&EndNo&”)
qdf.executedbfailonerror
关闭
BooksPacked=BooksPacked+BooksToPack
BooksInBox=BooksInBox+BooksToPack
如果BooksInBox=10,则
BoxNo=BoxNo+1
BooksInBox=0
如果结束
环
下一步
环
如果结束
设置qdf=无
bk.关闭
设置bk=Nothing
db.关闭
Set db=Nothing
端接头

为什么
第0002号箱第1~8本PO-0002
号箱没有书
1-10
?你是对的,我犯了一个错误(我很匆忙)我必须更改列表2担心列表2没问题,因为PO-0001的总图书数是12本书,当我们将10本书放入第0001号箱时,我们从12本书中保留了2本书,所以我们将这2本书放入(第11~12本书)在第0002框+po-0002的第1~8册中-理解。请给我一分钟。书籍**需要像
书籍1~10那样格式化吗?为什么不能说10呢?“`PO NO`将为您提供所有信息,然后您可以对表执行聚合,而不必使用VBA搜索字符串/子字符串