ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何用VBA保存历史记录

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-7-11 10:19 | 显示全部楼层 |阅读模式
各位老师:
       如何用VBA实现:将本表的填充颜色区域的数据保存到“历史明细”表中,本表的数据行是不确定的内容保持连续的行,“历史明细”中的付款日期为当天日期。

如果历史明细表中已有对应的记录(即收款账号名称、账号、开户行、金额和用途都一样的)最好给出提示是否保存

2013-07-11_095631.jpg

如何保存历史记录.rar (28.11 KB, 下载次数: 35)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-11 11:39 | 显示全部楼层
希望能得到老师们的帮助,先谢谢了!

TA的精华主题

TA的得分主题

发表于 2013-7-11 13:12 | 显示全部楼层
付款日期        收款账号名称        收款账号        收款账号开户行        金额        汇款用途
这几列都要填写吗?

TA的精华主题

TA的得分主题

发表于 2013-7-11 15:24 | 显示全部楼层
  1. Sub SaveData()
  2. Dim Ar, Br, Cr(), i%, n%, k%, m%, D
  3. n = Cells(Rows.Count, 3).End(xlUp).Row
  4. If n = 1 Then
  5.     MsgBox "没有要保存的数据!"
  6.     Exit Sub
  7. End If
  8. Ar = Range("c2:m" & n)
  9. Set D = CreateObject("scripting.dictionary")
  10. With Sheets("历史明细")
  11.     n = .Cells(Rows.Count, 2).End(xlUp).Row
  12.     If n > 1 Then
  13.         Br = .Range("b2:f" & n)
  14.         For k = 1 To n - 1
  15.             D(Br(k, 1) & Br(k, 2) & Br(k, 3) & Br(k, 4) & Br(k, 5)) = ""
  16.         Next
  17.     End If
  18. End With
  19. ReDim Cr(1 To UBound(Ar), 1 To 6)
  20. For k = 1 To UBound(Ar)
  21.     If D.exists(Ar(k, 3) & Ar(k, 2) & Ar(k, 4) & Ar(k, 1) & Ar(k, 11)) Then
  22.         If MsgBox("第" & k + 1 & "行数据已经存在,是否继续保存?", vbYesNo, "请确认") = vbNo Then GoTo Newline
  23.     End If
  24.     m = m + 1
  25.     Cr(m, 1) = Date: Cr(m, 2) = Ar(k, 3): Cr(m, 3) = Ar(k, 2): Cr(m, 4) = Ar(k, 4): Cr(m, 5) = Ar(k, 1): Cr(m, 6) = Ar(k, 11)
  26. Newline:
  27. Next
  28. If m > 0 Then
  29.     Sheets("历史明细").Range("a" & n + 1).Resize(m, 6) = Cr
  30.     MsgBox "数据保存完毕!"
  31. End If
  32. End Sub
复制代码

保存历史记录.rar

32.95 KB, 下载次数: 132

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-7-11 15:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
做个记号,不错,学习

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-11 20:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
bluexuemei 发表于 2013-7-11 13:12
付款日期        收款账号名称        收款账号        收款账号开户行        金额        汇款用途
这几列都要填写吗?

是的,老师,就是把制单中的相关列保存到“历史明细”表中,付款日期在“制单”中没有,就把保存时间作为付款日期即可

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-15 18:43 | 显示全部楼层
xuexi2xuexi 发表于 2013-7-11 15:24

老师:
If MsgBox("第" & k + 1 & "行数据已经存在,是否继续保存?", vbYesNo, "请确认") = vbNo Then GoTo Newline
这一行改成“是,否,取消”三个选项该怎么修改呀?

TA的精华主题

TA的得分主题

发表于 2013-7-16 11:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ugyun 发表于 2013-7-15 18:43
老师:
If MsgBox("第" & k + 1 & "行数据已经存在,是否继续保存?", vbYesNo, "请确认") = vbNo Then  ...

If MsgBox("第" & k + 1 & "行数据已经存在,是否继续保存?", vbYesNoCancel, "请确认") = vbNo Then GoTo Newline

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-16 13:44 | 显示全部楼层
xuexi2xuexi 发表于 2013-7-16 11:02
If MsgBox("第" & k + 1 & "行数据已经存在,是否继续保存?", vbYesNoCancel, "请确认") = vbNo Then Go ...

不好意思,是我没表达清楚,变成三个选项后,若选“是”,则保存记录,若选“否”,则不保存记录,若选“取消”,则退出

TA的精华主题

TA的得分主题

发表于 2013-7-16 14:58 | 显示全部楼层
ugyun 发表于 2013-7-16 13:44
不好意思,是我没表达清楚,变成三个选项后,若选“是”,则保存记录,若选“否”,则不保存记录,若选“ ...

已按要求作了修改,请看附件

保存历史记录2.rar

33.22 KB, 下载次数: 150

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-10 05:58 , Processed in 0.047187 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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