ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3910|回复: 5

[求助] access中如何根据固定条件将一行拆成多行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-6-3 08:56 | 显示全部楼层 |阅读模式
  例如样表1中,根据记录中订单数量除以装箱基数,得出拆成多少条记录,结果如样表2中,请各位老师帮忙解决,谢谢

样表.rar

15.84 KB, 下载次数: 20

TA的精华主题

TA的得分主题

发表于 2015-6-3 15:51 | 显示全部楼层
本帖最后由 roych 于 2015-6-3 15:53 编辑
  1. Function SplitBox()
  2. Dim rst1 As New ADODB.Recordset
  3. Dim rst2 As New ADODB.Recordset
  4. Dim fld As ADODB.Field
  5. Dim i As Long
  6. Dim lngBoxNum As Long
  7. '打开记录集
  8. rst1.Open "表1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  9. rst2.Open "表2", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  10. '拍的是否达到文件末端
  11. Do Until rst1.EOF
  12. '判断是否整箱
  13.     If rst1("订单需求量") Mod rst1("装箱基数") = 0 Then
  14.         lngBoxNum = rst1("订单需求量") / rst1("装箱基数")
  15.     Else
  16.         lngBoxNum = Int(rst1("订单需求量") / rst1("装箱基数")) + 1
  17.     End If
  18. '字段不多,这里就直接编码了。
  19.     For i = 1 To lngBoxNum
  20. '新增记录
  21.         rst2.AddNew
  22.         rst2("品番") = rst1("品番")
  23.         rst2("生产任务单号") = rst1("生产任务单号")
  24.         rst2("订单需求量") = rst1("订单需求量")
  25.         rst2("装箱基数") = rst1("装箱基数")
  26.         rst2("交货期") = rst1("交货期")
  27.         rst2("箱号") = i
  28.         rst2("总箱数") = lngBoxNum
  29. '更新记录
  30.         rst2.Update
  31.     Next
  32. '移动记录集光标
  33.     rst1.MoveNext
  34. Loop   
  35. End Function
复制代码

样表.rar (21 KB, 下载次数: 46)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-3 17:26 | 显示全部楼层

谢谢老师,但样表中的模块去哦不知道怎么调用,请老师指点,谢谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-3 22:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

老师,感谢你的帮助,你的这段VB里,可否再加两个功能:
1,每次执行时,自动对表2进行覆盖处理(就是先清空表2数据然后再更新)
2、当订单数量/装箱基数不为整数时,最后一箱装箱基数能否显示为整箱余数(如订单数量为10,
装箱基数为3,分四箱,最后一箱装箱数为1)
如:
订单数量   装箱数  箱号   总箱数
  10            3          1        4
  10            3          2        4
  10            3          3        4
  10            1          4        4

TA的精华主题

TA的得分主题

发表于 2015-6-4 11:53 | 显示全部楼层
1、请打开后按下F5执行。如果使用宏,请添加RunCode操作,然后在参数栏输入:SplitBox()。如果使用窗体按钮,请把代码贴入按钮的单击事件内,或者在按钮的单击事件内输入:call SplitBox()
2、3:见代码

  1. Function SplitBox()
  2. Dim rst1 As New ADODB.Recordset
  3. Dim rst2 As New ADODB.Recordset
  4. Dim fld As ADODB.Field
  5. Dim i As Long
  6. Dim lngBoxNum As Long
  7. Dim lngBoxSum As Long
  8. '删除数据【新增】
  9. CurrentProject.Connection.Execute "delete from 表2"

  10. rst1.Open "表1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  11. rst2.Open "表2", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

  12. Do Until rst1.EOF
  13. '判断是否整箱
  14.     If rst1("订单需求量") Mod rst1("装箱基数") = 0 Then
  15.         lngBoxNum = rst1("订单需求量") / rst1("装箱基数")
  16.     Else
  17.         lngBoxNum = Int(rst1("订单需求量") / rst1("装箱基数")) + 1
  18.     End If
  19. '字段不多,这里就直接编码了。
  20.     For i = 1 To lngBoxNum
  21.         rst2.AddNew
  22.         rst2("品番") = rst1("品番")
  23.         rst2("生产任务单号") = rst1("生产任务单号")
  24.         rst2("订单需求量") = rst1("订单需求量")
  25.         
  26.         rst2("交货期") = rst1("交货期")
  27.         rst2("箱号") = i
  28.         rst2("总箱数") = lngBoxNum
  29.         '如果不足一箱【修正】
  30.         If rst1("订单需求量") - lngBoxSum < rst1("装箱基数") Then
  31.             rst2("装箱基数") = rst1("订单需求量") - lngBoxSum
  32.         Else
  33.             rst2("装箱基数") = rst1("装箱基数")
  34.         End If
  35.         '更新累计装箱数【修正】
  36.         lngBoxSum = lngBoxSum + rst1("装箱基数")
  37.         rst2.Update
  38.     Next
  39.     '归零
  40.     lngBoxSum = 0
  41.     rst1.MoveNext
  42. Loop  
  43. End Function
复制代码

如还有其它问题,请去http://www.office-cn.net/forum.php找我,这里我不太经常来。
样表.rar (23.68 KB, 下载次数: 34)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-6-4 14:40 | 显示全部楼层
本帖最后由 zhmalbert 于 2015-6-4 14:48 编辑
roych 发表于 2015-6-4 11:53
1、请打开后按下F5执行。如果使用宏,请添加RunCode操作,然后在参数栏输入:SplitBox()。如果使用窗体按钮 ...

       老师,在你指点下,我的问题都已经解决,非常感谢{:soso_e179:}。
不过还有个问题要麻烦你,就是在我的窗体中,有一个按扭(按扭中有个表达式:=HandleButtonClick(8)),
点击按扭调用一个报表(报表数据来自于样本文件的表2),
      现在的报表操作步骤是:先调用你帮我写的那段VB(splitbox),向表2里添加最新数据,然后再点现窗体中标记的的按钮,
生成报表,报表及。
       这样操作比较麻烦,能否把向表2里添加数据和调用报表这两个步骤放在一起,只要点一下,即可生成有最新数据的报表,
请老师帮忙,谢谢。

无标题.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-25 23:47 , Processed in 0.040911 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表