ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 自动另存修改项数据的功能,代码有点问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-12 19:48 | 显示全部楼层 |阅读模式
本帖最后由 yooha 于 2018-8-12 23:35 编辑

诸位大师晚上好,本人小白今天折腾表格代码时意外发现了区域内当非空单元格被修改后触发清除指定单元格数据的功能,那么能否实现当单元格修改 自动保存修改前的那行数据(如果是多行同时修改就保存多行)到另一张表格作为历史纪录,逐行累加。 不知道有没有现成的功能,手上其他老师的代码也没想出来如何进行逻辑上的变通来实现这个功能。

个人猜想:假设表1为录入表,当操作表1时临时另存当前所有选中项所在行到表2,未发生修改则清空表2,若有修改则保存到表3做为历史纪录 然后清空表2。不知这样可行吗?
--------------------------------------------------------------------------------------------------------------------------------------------
保存历史记录.rar (32.95 KB, 下载次数: 0)

我修改了一位老师的代码,但不知为什么触发后会运行两遍。附件为那位老师的原代码。

Sub SaveData()
Dim Ar, Br, Cr(), i%, n%, k%, m%, D
n = Cells(Rows.Count, 1).End(xlUp).Row
If n = 1 Then
    [w1] = "录入后请及时刷新"
    Exit Sub
End If
Ar = Range("a2:u" & n)
Set D = CreateObject("scripting.dictionary")
With Sheets("历史记录表")
    n = .Cells(Rows.Count, 2).End(xlUp).Row
    If n > 1 Then
        Br = .Range("b2:v" & n)
        For k = 1 To n - 1
            D(Br(k, 1) & Br(k, 2) & Br(k, 3) & Br(k, 4) & Br(k, 5) & Br(k, 6) & Br(k, 7) & Br(k, 8) & Br(k, 9) & Br(k, 10) & Br(k, 11) & Br(k, 12) & Br(k, 13) & Br(k, 14) & Br(k, 15) & Br(k, 16) & Br(k, 17) & Br(k, 18) & Br(k, 19) & Br(k, 20) & Br(k, 21)) = ""
        Next
    End If
End With
ReDim Cr(1 To UBound(Ar), 1 To 22)
For k = 1 To UBound(Ar)
    If D.exists(Ar(k, 1) & Ar(k, 2) & Ar(k, 3) & Ar(k, 4) & Ar(k, 5) & Ar(k, 6) & Ar(k, 7) & Ar(k, 8) & Ar(k, 9) & Ar(k, 10) & Ar(k, 11) & Ar(k, 12) & Ar(k, 13) & Ar(k, 14) & Ar(k, 15) & Ar(k, 16) & Ar(k, 17) & Ar(k, 18) & Ar(k, 19) & Ar(k, 20) & Ar(k, 21)) Then
        If MsgBox("第" & k + 1 & "行数据已经存在,是否继续保存?", vbYesNo, "请确认") = vbNo Then GoTo Newline
    End If
    m = m + 1
    Cr(m, 1) = Now: Cr(m, 2) = Ar(k, 1): Cr(m, 3) = Ar(k, 2): Cr(m, 4) = Ar(k, 3): Cr(m, 5) = Ar(k, 4): Cr(m, 6) = Ar(k, 5): Cr(m, 7) = Ar(k, 6): Cr(m, 8) = Ar(k, 7): Cr(m, 9) = Ar(k, 8): Cr(m, 10) = Ar(k, 9): Cr(m, 11) = Ar(k, 10): Cr(m, 12) = Ar(k, 11): Cr(m, 13) = Ar(k, 12): Cr(m, 14) = Ar(k, 13): Cr(m, 15) = Ar(k, 14): Cr(m, 16) = Ar(k, 15): Cr(m, 17) = Ar(k, 16): Cr(m, 18) = Ar(k, 17): Cr(m, 19) = Ar(k, 18): Cr(m, 20) = Ar(k, 19): Cr(m, 21) = Ar(k, 20): Cr(m, 22) = Ar(k, 21)
Newline:
Next
If m > 0 Then
    Sheets("历史记录表").Range("a" & n + 1).Resize(m, 22) = Cr
    MsgBox "数据保存完毕!"
End If
End Sub


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

本版积分规则

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

GMT+8, 2025-1-11 22:53 , Processed in 0.016425 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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